我需要指导如何分割20位数字(例如77772222666611118888)并唯一地分配给5个声明的int变量,例如int n1,n2,n3,n4,n5。
预期结果
int mynumber = 77772222666611118888;
并且,在分割和分配之后,可以获得以下内容:
n1=7777;
n2=2222;
n3=6666;
n4=1111;
n5=8888;
由于
答案 0 :(得分:5)
您可以使用简单的正则表达式
string mynumber = "77772222666611118888";
var ns = Regex.Matches(mynumber, @"\d{4}").Cast<Match>()
.Select(x => x.Value)
.ToList();
答案 1 :(得分:3)
您需要long
或Decimal
来存储初始数字,因为它对于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() ;
获得预期的