C#:在给定参数长度后拆分一系列数字

时间:2012-07-22 08:20:03

标签: c# .net c#-4.0

我有一个这样的数字: 12345668788451223356456898941220036696897894

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

78845122等等到数字结尾。 如果我将它转换为字符串,我没有方法,所以我只能用长度参数拆分它。

提前感谢您的回答。

3 个答案:

答案 0 :(得分: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);
}

如果您需要以List<int>结尾,只需在此处添加对int.Parse的通话。

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

BigInteger方法

目前还不清楚你的这个号码是什么形式的。如果是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。你需要知道你想要提取多少个数字:)

答案 1 :(得分:2)

使用此正则表达式在每8位数后分割

\d{1,8}

OR

(\d{1,8})

输出:

12345668
78845122
33564568
98941220
03669689
7894

答案 2 :(得分: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);
}