可能重複:
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