0

我有一个类似这样的号码:12345668788451223356456898941220036696897894

现在,问题是如何在每 8 位数字之后拆分数字。也就是说,我需要输出为:12345668

78845122 以此类推,直到号码结束。如果我将它转换为字符串,我没有一个方法,所以我只能用长度参数来分割它。

提前感谢您的回答。

4

3 回答 3

4

字符串方法

如果我将它转换为字符串,我没有一个方法,所以我只能用长度参数来分割它。

嗯,你有Substring,不是吗?您可以使用 LINQ:

var numbers = Enumerable.Range(0, bigNumber.Length / 8)
                        .Select(x => bigNumber.Substring(x * 8, 8)
                        .ToList();

或直接循环:

var numbers = new List<string>();
for (int i = 0; i < bigNumber.Length / 8; i++)
{
    numbers.Add(bigNumber.Substring(i * 8, 8);
}

如果您需要以 a 结尾List<int>,只需在其中添加一个调用即可int.Parse

(您应该首先检查输入字符串长度是否为 8 的倍数。)

大整数方法

目前尚不清楚您以什么形式开始使用此号码。如果是BigInteger,您可以继续使用DivRem

BigInteger value = ...;
List<BigInteger> results = new List<BigInteger>();
BigInteger divisor = 100000000L;
for (int i = 0; i < count; i++)
{
    BigInteger tmp;
    value = BigInteger.DivRem(value, divisor, out tmp);
    results.Add(tmp);
}

请注意,我在count这里使用而不是循环直到value为 0,以防您有很多前导 0。您需要知道要提取多少个数字:)

于 2012-07-22T08:24:00.257 回答
2

使用此正则表达式在每 8 位数字后拆分,

\d{1,8}

或者

(\d{1,8})

输出:

12345668
78845122
33564568
98941220
03669689
7894
于 2012-07-22T08:25:30.677 回答
0

您是否尝试过使用

string string.substring(int startIndex,int length)

在您的情况下,您可以编写一个循环从字符串中提取 8 位数字,直到提取所有数字

string sDigits = "12345668788451223356456898941220036696897894";
int iArrLen = sDigits.length / 8;
string[] sArrDigitList = new string[iArrLen];

for(int i=0; i < sDigits.length; i++)
{
   sArrDigitList[i] = sDigits.substring(0, 8);
   sDigits = sDigits.substring(sDigits.length-8);
}
于 2012-07-22T08:32:20.830 回答