【问题标题】:Parse a string containing integers into a List<int>将包含整数的字符串解析为 List<int>
【发布时间】:2011-09-22 15:29:20
【问题描述】:

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

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

【问题讨论】:

  • 您希望从“1-10000”等范围的列表中得到什么结果?它应该在列表中添加 10000 个数字吗?
  • @Guffa:是的,1-10000 会将 1 到 10K 的所有数字添加到列表中。例如,1-5 会将整数 1,2,3,4,5 添加到列表中。

标签: c# parsing .net-2.0


【解决方案1】:

这行得通:

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

大同小异... :-)

【讨论】:

  • 谢谢。对我来说,问题是我们必须使用 .NET 2.0 来做到这一点。
  • @stanleyR - 我在答案中添加了 .NET 2.0 版本。
  • 谢谢! x 中可能没有“-”;它可能只是一个整数值。例如,文本可能是 1-2,5,222,5-9。这能处理吗?再次感谢!
  • @stanleyR - 是的,确实如此。如果你有一个使用“-”分割的字符串“24”,那么你只需返回一个包含一个字符串的数组。这就是我解析数组中第一个和最后一个值的原因。它很好地处理单值和双值数组。
  • 工作得很好。接受的答案。谢谢。
【解决方案2】:

String.split 用逗号分割,如果一个组包含 - 再次分割并且你有两个范围值,它将给你所有你需要的东西

【讨论】:

    【解决方案3】:

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

    根据记忆,List 上有一个 Split(..) 方法,您可以使用它来获取令牌。然后只需测试是否存在“-”(如果它是第一个字符,那么它是负数,显然不是范围)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-14
      • 2013-12-08
      • 1970-01-01
      相关资源
      最近更新 更多