C#拆分20位数字并将其分配给5个字符串变量

时间:2014-10-03 20:58:22

标签: c#

我需要指导如何分割20位数字(例如77772222666611118888)并唯一地分配给5个声明的int变量,例如int n1,n2,n3,n4,n5。

预期结果

int mynumber = 77772222666611118888;

并且,在分割和分配之后,可以获得以下内容:

n1=7777;
n2=2222;
n3=6666;
n4=1111;
n5=8888;

由于

5 个答案:

答案 0 :(得分:5)

您可以使用简单的正则表达式

string mynumber = "77772222666611118888";
var ns = Regex.Matches(mynumber, @"\d{4}").Cast<Match>()
              .Select(x => x.Value)
              .ToList();

答案 1 :(得分:3)

您需要longDecimal来存储初始数字,因为它对于int来说太长了。

完成后,使用模数来获取数字(反向),并使用除法来除去使用过的数字:

long tempNumber = number;
List<long> splitNumbers = new List<long>();

while (tempNumber > 0)
{
   long currentDigits = number % 10000;
   tempNumber = tempNumber / 10000; //Make sure this is integer division!

   //Store cuurentDigits off in your variables
   // 8888 would be the first number returned in this loop
   // then 1111 and so on
   splitNumbers.Add(currentDigits);
}

//We got the numbers backwards, so reverse the list
IEnumerable<long> finalNumberList = splitNumbers.Reverse();

您也可以将其变为字符串,并使用.Take(4)int.Parse来获取您的数字。

答案 2 :(得分:3)

如果您需要使用单独的变量,可以这样做:

        string mynumber = "77772222666611118888";
        string n1 = mynumber.Substring(0, 4);
        string n2 = mynumber.Substring(4, 4);
        string n3 = mynumber.Substring(8, 4);
        string n4 = mynumber.Substring(12, 4);
        string n5 = mynumber.Substring(16, 4);

如果您愿意使用数组或其他集合,则可以执行此操作:

        int stringSize = 4;
        string[] n = new string[mynumber.Length / stringSize];
        for (int i = 0; i < n.Length; i ++)
        {
            n[i] = mynumber.Substring(i*4, stringSize);
        }

答案 3 :(得分:1)

您应首先将myNumber转换为字符串, 然后使用substring函数提取此数字的每个部分 并将这些字符串解析回所需的整数

答案 4 :(得分:0)

您尚未定义执行所询问的拆分的规则。你是根据位置和长度分裂的吗?你是否根据相同数字的运行进行拆分?

假设你基于相同数字的运行进行拆分,你可以像这样使用反向引用

Regex rxSameDigits = new Regex(@"(\d)(\1)*") ;

\1说,使用指定组的,在这种情况下,该组以正则表达式中的第一个左括号开头。所以它说

  • 匹配任何数字,然后是
  • 完全相同的数字中的零个或多个

所以它会匹配1,22,333等序列。所以你可以简单地说:

string   s     = "1223334444555556666667777777888888889999999990000000000" ;
string[] split = rxSameDigits.Matches(s).Cast<Match>().Select( x => x.Value ).ToArray() ;

获得预期的

  • 1
  • 22
  • 333
  • 4444
  • 55555
  • 666666
  • 7777777
  • 88888888
  • 999999999
  • 0000000000