如何將具有\r\n
的字符串轉換爲行?如何使用換行符將字符串轉換爲單獨的行?
例如,利用這個字符串:
string source = "hello \r\n this is a test \r\n tested";
,我怎麼可以轉換到:
string[] lines ;
//lines[0] = hello;
//lines[1] = this is a test;
//lines[2] = tested ;
如何將具有\r\n
的字符串轉換爲行?如何使用換行符將字符串轉換爲單獨的行?
例如,利用這個字符串:
string source = "hello \r\n this is a test \r\n tested";
,我怎麼可以轉換到:
string[] lines ;
//lines[0] = hello;
//lines[1] = this is a test;
//lines[2] = tested ;
使用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
,正如它的名字說,刪除空字符串(" "
沒有資格爲空,只有""
一樣)。
嘗試
string[] items = source.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
他沒有聲明他想刪除空條目。 – 2010-08-23 08:35:58
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指定是否保留空行或刪除它們。 (例如,如果要分割多行文本(如段落,但會在名稱列表的示例中刪除它們),則會希望保留它們)
除了提到的string.Split,您也可以使用Regex.Split,但對於更復雜的分割模式通常更有用。
var lines = Regex.Split(source, @"\r\n");
我會說正則表達式會是更好的解決方案;如果您還想刪除換行符之前和之後的空格,或者沒有回車符。正則表達式會是這樣的:@「* \ r?\ n *」 – 2010-08-23 09:43:29
@Andre:我同意當你不是100%確定的輸入。然後你可以用正則表達式更好的模糊分割。如果您自己創建文件,則可能不需要。 – 2010-08-23 10:52:53
爲了清楚起見,我做了另一個答案。
我做了這兩種擴展方法:
ReadLines
將讓你閱讀的時候一行沒有整個字符串解析到一個數組。 ReadAllLines
會將整行解析爲一個數組。
在你的情況,你可以用它喜歡:
var lines = source.ReadAllLines();
我從File.ReadLines
和File.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
這需要一些處理時間更好)
您可以添加的Mac:'\ r'爲以及IBM的'\ x0085'(請參閱[本說明](http://www.w3.org/TR/newline)):) – Abel 2010-08-23 08:38:53
不知道他們有'\ r',但我只看到' Mac OS <= 9',因此它們正確無關。 – 2010-08-23 08:41:44
正確的常量是System.Environment.NewLine。 – 2010-08-23 08:50:50