2010-02-11 88 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

相關問題