2010-02-11 66 views
4

可能重复:
Parse multiple doubles from string in C#C# - 解析一行文本 - 执行此操作的最佳方法是什么?

说我有一个文本行看起来如下:

“45.690 24.1023 0.09223 4.1334”

会是什么在C#中,最有效的方法是只从这一行中提取数字?每个数字之间的空格数量因行而异,并且不可预测。我必须这样做几千次,所以效率是关键。

谢谢。

+4

完全重复:http://stackoverflow.com/questions/1406129 – dtb 2010-02-11 16:03:03

+0

什么是你想要的提取物? 456902410230922341334? – kd7 2010-02-11 16:03:35

+0

你可能会在这里找到一些有用的材料:http://stackoverflow.com/questions/1561273/parse-an-integer-from-a-string-with-trailing-garbage,虽然这些解决方案仅适用于整数。 – finnw 2010-02-11 16:04:08

回答

5
IEnumerable<double> doubles = s.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries) 
           .Select<string, double>(double.Parse) 

更新使用StringSplitOptions.RemoveEmptyEntries以来的空格数变化

+0

@dtb感谢您的幽灵评论,正在修复您发布的内容 – 2010-02-11 16:07:53

+0

如果将其更改为:s.Split(new char [] {'',StringSplitOptions.RemoveEmptyEntries).Select(double.Parse); 足够接近答案! – 2010-02-11 16:16:04

2

使用正则表达式拆分。这将让你拆就你的号码之间的任何长度的任何空白:

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

在那里扔&符号+1 – 2010-02-11 16:14:09

+0

模式不是''\\ s +“'? – 2010-02-11 16:26:45

+0

为什么是。是的,它会。对不起,在VB和C#之间压缩我的手指会感到困惑。 – 2010-02-11 17:00:39

0

我没有测量,但如果你是想成为高效所以大概就像

var chars = new List<char>(); 
for(int i =0; i < numChars; ++i) 
    if(char.IsDigit(text[i])) 
     chars.Add(text[i]); 
0
简单是关键

你想高效.....

var regex = new Regex(@"([\d\.]+)", RegexOptions.Compiled) 
var matches = regex.Matches(input); 
+0

将会吸引点? – 2010-02-11 16:11:57

+0

不,但是\。将。 – 2010-02-11 22:16:51

相关问题