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

本文关键字:分配 5个 字符串 变量 20位 拆分 数字 | 更新日期: 2023-09-27 18:25:33

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

预期结果

int mynumber = 77772222666611118888;

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

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

感谢

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

您可以使用一个简单的正则表达式进行

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

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

        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);
        }

您需要一个longDecimal来存储初始数字,因为它太长了,不适合内部

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

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来获取您的数字。

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

您还没有定义执行所询问的拆分的规则。你是根据位置和长度来划分的吗?你是根据相同数字的排列进行拆分吗?

假设你是基于相同数字的运行进行拆分,你可以使用backreference,就像

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
  • 77777777
  • 88888888
  • 999999999
  • 0000000000