2013-02-10 82 views
5

我有這樣"1\t2\r\n3\t4"串,我想將它們分割爲:如何用不同的分隔符使用LINQ分割兩次字符串?

new string[][] { { 1, 2 }, { 3, 4 } }

基本上,它應該分成行,每行應分成標籤。我嘗試使用以下,但它不工作:

string toParse = "1\t2\r\n3\t4"; 

string[][] parsed = toParse 
    .Split(new string[] {@"\r\n"}, StringSplitOptions.None) 
    .Select(s => s.Split('\t')) 
    .ToArray(); 
  1. 什麼是錯我的方法?爲什麼我不能得到理想的結果?
  2. 你會如何使用LINQ來解決這個問題?

回答

7

刪除 '@':不是他們所代表的性格

string toParse = "1\t2\r\n3\t4"; 

string[][] parsed = toParse 
    .Split(new string[] {"\r\n"}, StringSplitOptions.None) 
    .Select(s => s.Split('\t')) 
    .ToArray(); 

的@使得字符串包括反斜槓。

+0

老實說,我不知道什麼愚蠢的緣故,我補充說,'@'那裏,一直沒能看到它。非常感謝! :D – hattenn 2013-02-10 21:26:17

+0

@hattenn,我不是故意要bit牙咧! – bas 2013-02-10 22:25:53

+0

是的,我有同樣的問題,我不敢把它放在評論中,因爲我知道這不是地方。但是我想知道這是否是一件臨時的事情,因爲它非常有用! – bas 2013-02-10 22:30:50

3
string str = "1\t2\r\n3\t4"; 
Int32[][] result = str.Split(new[] { Environment.NewLine }, StringSplitOptions.None) 
    .Select(s => s.Split('\t').Select(s2 => int.Parse(s2)).ToArray()) 
    .ToArray(); 

Demo

+0

用'Environment.Newline'替換原始字符串中的'\ r \ n'會更好嗎?如果我們知道字符串具有'\ r \ n',那麼如果代碼在不同的平臺上運行,'Environment.Newline'將不起作用。雖然我懷疑這是一個問題。 – TheEvilPenguin 2013-02-10 21:29:30

+1

如果代碼在不同平臺上運行,則輸入文本可能包含正確的行分隔符。 – 2013-02-10 21:31:38

+0

是的。我想在代碼中包含一個字符串文字並將其分開是沒有意義的,所以這個字符串必須來自其他地方。我認爲這只是癢癢我的兒子在一個片段中看到平臺依賴和平臺獨立版本。 – TheEvilPenguin 2013-02-10 21:35:41