2011-09-22 33 views
1

我希望让用户通过以下方式输入整数:解析包含整数字符串转换成列表<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#所以一些示例代码将不胜感激。谢谢。

+2

你想什么的结果来自像“1-10000”的范围列表?是否应该在列表中添加10000个数字? – Guffa

+0

@Guffa:是的,1-10000会将所有从1到10K的数字添加到列表中。例如,1-5将把int 1,2,3,4,5加到列表中。 – stanleyR

回答

2

这工作:

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版本。

​​

许多相同的... :-)

+0

谢谢。问题是,我们必须使用.NET 2.0来做到这一点。 – stanleyR

+0

@stanleyR - 我添加了.NET 2.0版本到我的答案。 – Enigmativity

+0

谢谢! x中可能没有' - ';它可能只是一个整数值。例如,文本可能是1-2,5,222,5-9。这是否处理?再次感谢! – stanleyR

2

String.split分裂逗号,会给你所有你需要的,然后如果一个组包含 - 再拆分它,你有两个范围值

0

Tokenise基础上,字符串“”然后解析单个数字或范围的列表。

从内存中可以看到List上的Split(..)方法,您可以使用它来获取令牌。然后,只需测试一个' - '的存在(如果它的第一个字符是负数,那么显然不是一个范围)。