2011-04-07 51 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