2010-08-23 120 views

回答

3

使用String.Split Method (String[], StringSplitOptions)這樣的:

var lines = source.Split(new [] { "\r\n", "\n" }, StringSplitOptions.None); 

這人會不顧工作源代碼是否使用Windows linebreak \r\n或Unix編寫\n

至於其他的答案中提到,您可以使用StringSplitOptions.RemoveEmptyEntries代替StringSplitOptions.None,正如它的名字說,刪除空字符串(" "沒有資格爲空,只有""一樣)。

+0

您可以添加的Mac:'\ r'爲以及IBM的'\ x0085'(請參閱[本說明](http://www.w3.org/TR/newline)):) – Abel 2010-08-23 08:38:53

+0

不知道他們有'\ r',但我只看到' Mac OS <= 9',因此它們正確無關。 – 2010-08-23 08:41:44

+0

正確的常量是System.Environment.NewLine。 – 2010-08-23 08:50:50

0

嘗試

string[] items = source.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); 
+2

他沒有聲明他想刪除空條目。 – 2010-08-23 08:35:58

0
string text = "Hello \r\n this is a test \r\n tested"; 
string[] lines = text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); 
foreach (string line in lines) { 
    System.Diagnostics.Debug.WriteLine(line); 
} 

可以使用overloads of System.String.Split使用單個字符,字符數組,或字符串值的數組作爲分隔符用於拆分字符串。 StringSplitOptions指定是否保留空行或刪除它們。 (例如,如果要分割多行文本(如段落,但會在名稱列表的示例中刪除它們),則會希望保留它們)

1

除了提到的string.Split,您也可以使用Regex.Split,但對於更復雜的分割模式通常更有用。

var lines = Regex.Split(source, @"\r\n"); 
+0

我會說正則表達式會是更好的解決方案;如果您還想刪除換行符之前和之後的空格,或者沒有回車符。正則表達式會是這樣的:@「* \ r?\ n *」 – 2010-08-23 09:43:29

+0

@Andre:我同意當你不是100%確定的輸入。然後你可以用正則表達式更好的模糊分割。如果您自己創建文件,則可能不需要。 – 2010-08-23 10:52:53

0

爲了清楚起見,我做了另一個答案。

我做了這兩種擴展方法:

ReadLines將讓你閱讀的時候一行沒有整個字符串解析到一個數組。 ReadAllLines會將整行解析爲一個數組。

在你的情況,你可以用它喜歡:

var lines = source.ReadAllLines(); 

我從File.ReadLinesFile.ReadAllLines採取的名稱,以便它們應與.NET Framework的其餘部分保持一致。

作爲一個側面說明,以我的其他答案的評論,我已經檢查StringReader.ReadLine的代碼,這也同時兼顧\r\n\n的 - 而不是舊的遺留MAC OS等(不應該是很重要的)。

public static class StringExtensions 
{ 
    public static IEnumerable<string> ReadLines(this string data) 
    { 
     using (var sr = new StringReader(data)) 
     { 
      string line; 

      while ((line = sr.ReadLine()) != null) 
       yield return line; 
     } 
    } 

    public static string[] ReadAllLines(this string data) 
    { 
     var res = new List<string>(); 

     using (var sr = new StringReader(data)) 
     { 
      string line; 

      while ((line = sr.ReadLine()) != null) 
       res.Add(line); 
     } 

     return res.ToArray(); 
    } 
} 

ReadAllLines可能已與ReadLines.ToArray,但我決定,額外的代碼行數比一個包裹IEnumerable這需要一些處理時間更好)

相關問題