将String解析为.NET中的项列表

时间:2014-02-28 07:38:28

标签: .net string parsing

将以下String解析为整数值列表的最快方法(执行速度最快)是什么? 我需要##marks之间指定的值。

"#1#+#2#+#3#*1.23+#4#/2+#5#"

上面的String应该创建一个Integers列表:

  • 1
  • 2
  • 3
  • 4
  • 5

4 个答案:

答案 0 :(得分:2)

使用正则表达式......

var input = "#1#+#2#+#3#*1.23+#4#/2+#5#";

var matches = Regex.Matches(input, "#(.*?)#")
                   .Cast<Match>()
                   .Select(m => m.Groups[1].Value)
                   .ToList();

matches.ForEach(Console.WriteLine);

小提琴:http://dotnetfiddle.net/GMqhXZ

答案 1 :(得分:1)

使用string.Split将值拆分为字符串数组,然后使用int.Parse解析整数,或double.Parse解析浮点值。

如果这是您的输入,您可能还需要在字符串上使用要删除的字符拨打Trim,例如'*', '/', '+'

答案 2 :(得分:1)

可能是这个?

var array = Regex.Matches("#1#+#2#+#3#*1.23+#4#/2+#5#", @"(?<=#)\d+(?=#)")
                  .Cast<Match>()
                  .Select(x => x.Value)
                  .ToArray();

检查#是否在数字之前和之后,如果是,则匹配它。

以下是ideone demo

答案 3 :(得分:0)

最易读的解决方案就像

  string text = "#1#+#2#+#3#*1.23+#4#/2+#5#";
  foreach (string fragment in text.Split('#'))
  {
    int number;
    if (int.TryParse(fragment, NumberStyles.Integer, CultureInfo.InvariantCulture, out number))
    {
       Console.WriteLine(number);
    }
 }

也许可以找到更快的实现 - 但如果你不需要解析数百万个数字,我宁愿选择一个可读的解决方案。