将包含整数的字符串解析为List <int> </int>

时间:2011-09-22 06:05:41

标签: c# parsing .net-2.0

我想让用户通过以下方式输入整数:

  • 以逗号分隔的数字: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#很陌生,因此非常感谢一些示例代码。感谢。

3 个答案:

答案 0 :(得分:2)

String.split按逗号分割,将为您提供所需的一切,如果一个组包含 - 再次拆分并且您有两个范围值

答案 1 :(得分: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版本。

var result = new List<int>();
foreach (var x in text.Split(','))
{
    var y = x.Split('-');
    var b = int.Parse(y[0].Trim());
    var e = int.Parse(y[y.Length - 1].Trim());
    for (var n = b; n <= e; n++)
    {
        result.Add(n);
    }
}

大致相同......: - )

答案 2 :(得分:0)

根据','对字符串进行标记,然后解析单个数字或范围的列表。

在内存中,List上有一个Split(..)方法,可用于获取令牌。然后测试一下' - '的存在(如果它是第一个字符,那么它的负数,显然不是一个范围)。