将以下String解析为整数值列表的最快方法(执行速度最快)是什么? 我需要##marks之间指定的值。
"#1#+#2#+#3#*1.23+#4#/2+#5#"
上面的String应该创建一个Integers列表:
答案 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);
答案 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);
}
}
也许可以找到更快的实现 - 但如果你不需要解析数百万个数字,我宁愿选择一个可读的解决方案。