2011-04-07 53 views
5

我對什麼是打破行的正確方法感到困惑。如何打破行中的字符串

我讀的地方,窗戶使用\ r \ n以中斷線路,但是這兩個代碼產生相同的

regex.split(sometext, "\r\n"); 
regex.split(sometext, "\n"); 

它是什麼的正確方法?這些表達式總是產生相同的?

+0

首先 - 這不是C#。 .Net有'Regex.Split'。接下來,您可以提供更多細節 - 您是否需要保留空行?數據來自哪裏? – Kobi 2011-04-07 15:23:26

+0

@Kobi他本可以從內存中寫出這些,這可以解釋不正確的外殼。 – NKCSS 2011-04-07 15:24:36

+0

@NKCSS - 當問一個問題''時,這是一個非常糟糕的做法:)' – Kobi 2011-04-07 15:26:13

回答

3

如果你想支持新行字符爲各種平臺(例如,你需要分析輸入文件,在Linux下創建/ Windows/Mac在您的ASP。NET的網站),你不要攜帶空字符串,我建議用這個方法來代替:

myString.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries) 

這將返回

["one","two","three"] 

輸入字符串

"one\r\ntwo\n\n\nthree" 

更新: 如果您需要攜帶空行,您可以使用

myString.Replace("\r\n", "\n").Split("\n") 

這應該適用於「\ r \ n」和「\ n」EOL字符文件。

+0

好主意我打算使用它。如果我的字符串有一個異端的結尾,我可以添加一個替換更多刪除(非常不可能發生)隱形CR .... myString.Replace(「\ r \ n」,「\ n」)。replace(「\ R」, 「」)。分裂( 「\ n」 個) – mjsr 2011-04-07 21:12:29

12

使用

var myArray = sometext.Split(Environment.NewLine); 

Environment.NewLine會選擇正確的操作系統。如果數據是在不同的系統上創建的,這將失敗。一些可能在所有系統上工作,但有一些意想不到的後果是

var myArray = sometext.Split(new[] {'\r', '\n'}, 
    StringSplitOptions.RemoveEmptyEntries); 

一些可能令人擔憂的事情之一是,它會刪除在回車所有空行和分裂。

2

\ r是carriage return \ n是newline

Windows默認使用\ r \ n (Environment.NewLine)

[改寫澄清Environment.NewLine部分]

爲了得到正確的字符到你的文字,你可以使用Environment.NewLine,這將根據報告你的平臺上正確的字符分割。

+0

@NKCSS:您基本上重複了原始問題中提供的信息,並忽略了問題本身。請考慮改進你的答案。 – blubb 2011-04-07 15:10:44

+0

@Simon Stelling:我比賽過。這個問題顯然表明他不知道\ r \ n和\ n之間的區別。我也解釋了爲什麼使用\ r \ n(Windows默認),並試圖從這裏開始使用Environment.NewLine。 – NKCSS 2011-04-07 15:13:13

+0

@Simon Stelling - 這是一個苛刻的評估。答案可以改善,但我認爲它不值得贊成(無論是誰)。 – 2011-04-07 15:21:33

0

由於其他答案中提到的原因,只做編輯說。 兩者都正常,但是我個人會使用:

regex.split(sometext, "\n"); 

編輯:

使用Environment.Newline在其他的答案建議。

+0

Environment.NewLine是要走的路;你的例子在一些場景中用\ r char's來留下文本,這是不可取的。 – NKCSS 2011-04-07 15:08:12

0
regex.split(sometext, "\r\n"); 

將是做到這一點的方法。

原因,兩者似乎都給出了相同的結果是因爲「\ n」在「\ r」後打斷了字符串。所以你有一個帶有尾部「\ r」的子字符串,除非你用十六進制編輯器或其他東西仔細看它,否則這不會很明顯。

不過我建議使用,而不是「\ r \ n」個Environment.NewLine