我希望让用户通过以下方式输入整数:解析包含整数字符串转换成列表<int>
号码之间用逗号分隔:1,3,122,64000,27等
数字范围:37-2000
以上的混合物:55,2,1-10000,65000-65007,2182
我怎样才能解析一个字符串,可能在上面的任何一种形式结束了一个int列表?
因此,例如:1-5,6,7-8应该给一个列表包含整数1,2,3,4,5,6,7,8
我很新的C#所以一些示例代码将不胜感激。谢谢。
我希望让用户通过以下方式输入整数:解析包含整数字符串转换成列表<int>
号码之间用逗号分隔:1,3,122,64000,27等
数字范围:37-2000
以上的混合物:55,2,1-10000,65000-65007,2182
我怎样才能解析一个字符串,可能在上面的任何一种形式结束了一个int列表?
因此,例如:1-5,6,7-8应该给一个列表包含整数1,2,3,4,5,6,7,8
我很新的C#所以一些示例代码将不胜感激。谢谢。
这工作:
var query =
from x in text.Split(',')
let y = x.Split('-')
let b = int.Parse(y[0].Trim())
let e = int.Parse(y[y.Length - 1].Trim())
from n in Enumerable.Range(b, e - b + 1)
select n;
var result = query.ToList();
我建议加入一些错误处理,但如果你输入了正确的格式这个作品。
**编辑**:.NET 2.0版本。
许多相同的... :-)
谢谢。问题是,我们必须使用.NET 2.0来做到这一点。 – stanleyR
@stanleyR - 我添加了.NET 2.0版本到我的答案。 – Enigmativity
谢谢! x中可能没有' - ';它可能只是一个整数值。例如,文本可能是1-2,5,222,5-9。这是否处理?再次感谢! – stanleyR
String.split分裂逗号,会给你所有你需要的,然后如果一个组包含 - 再拆分它,你有两个范围值
Tokenise基础上,字符串“”然后解析单个数字或范围的列表。
从内存中可以看到List上的Split(..)方法,您可以使用它来获取令牌。然后,只需测试一个' - '的存在(如果它的第一个字符是负数,那么显然不是一个范围)。
你想什么的结果来自像“1-10000”的范围列表?是否应该在列表中添加10000个数字? – Guffa
@Guffa:是的,1-10000会将所有从1到10K的数字添加到列表中。例如,1-5将把int 1,2,3,4,5加到列表中。 – stanleyR