可能重复:
Parse multiple doubles from string in C#C# - 解析一行文本 - 执行此操作的最佳方法是什么?
说我有一个文本行看起来如下:
“45.690 24.1023 0.09223 4.1334”
会是什么在C#中,最有效的方法是只从这一行中提取数字?每个数字之间的空格数量因行而异,并且不可预测。我必须这样做几千次,所以效率是关键。
谢谢。
可能重复:
Parse multiple doubles from string in C#C# - 解析一行文本 - 执行此操作的最佳方法是什么?
说我有一个文本行看起来如下:
“45.690 24.1023 0.09223 4.1334”
会是什么在C#中,最有效的方法是只从这一行中提取数字?每个数字之间的空格数量因行而异,并且不可预测。我必须这样做几千次,所以效率是关键。
谢谢。
IEnumerable<double> doubles = s.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
.Select<string, double>(double.Parse)
更新使用StringSplitOptions.RemoveEmptyEntries以来的空格数变化
@dtb感谢您的幽灵评论,正在修复您发布的内容 – 2010-02-11 16:07:53
如果将其更改为:s.Split(new char [] {'',StringSplitOptions.RemoveEmptyEntries).Select(double.Parse); 足够接近答案! – 2010-02-11 16:16:04
使用正则表达式拆分。这将让你拆就你的号码之间的任何长度的任何空白:
string input = "45.690 24.1023 .09223 4.1334";
string pattern = "\\s*"; // Split on whitepsace
string[] substrings = Regex.Split(input, pattern);
foreach (string match in substrings)
{
Console.WriteLine("'{0}'", match);
}
在那里扔&符号+1 – 2010-02-11 16:14:09
模式不是''\\ s +“'? – 2010-02-11 16:26:45
为什么是。是的,它会。对不起,在VB和C#之间压缩我的手指会感到困惑。 – 2010-02-11 17:00:39
我没有测量,但如果你是想成为高效所以大概就像
var chars = new List<char>();
for(int i =0; i < numChars; ++i)
if(char.IsDigit(text[i]))
chars.Add(text[i]);
你想高效.....
var regex = new Regex(@"([\d\.]+)", RegexOptions.Compiled)
var matches = regex.Matches(input);
将会吸引点? – 2010-02-11 16:11:57
不,但是\。将。 – 2010-02-11 22:16:51
完全重复:http://stackoverflow.com/questions/1406129 – dtb 2010-02-11 16:03:03
什么是你想要的提取物? 456902410230922341334? – kd7 2010-02-11 16:03:35
你可能会在这里找到一些有用的材料:http://stackoverflow.com/questions/1561273/parse-an-integer-from-a-string-with-trailing-garbage,虽然这些解决方案仅适用于整数。 – finnw 2010-02-11 16:04:08