如何拆分Environment.NewLine?

时间:2015-06-13 23:24:35

标签: c#

我想计算文本中的行数。

以下工作正常:

int numLines = copyText.Split('\n').Length - 1;

但是,我在整个代码中使用System.Environment.NewLine并尝试使用时:

 int numLines = copyText.Split(System.Environment.NewLine).Length - 1;

它不断提出一条红色的蠕动线在下面说明不能将字符串转换为char。一直试图纠正这个但没有运气。有没有人有任何想法?

3 个答案:

答案 0 :(得分:8)

要在换行符上拆分,您可以使用以下内容:

copyText.Split(new string[] { System.Environment.NewLine },
               StringSplitOptions.None).Length - 1;

以下是使用字符串数组的重载的overload

请注意,reference的类型为System.String。在Windows上,它是一个2个字符的字符串:\r\n,在Unix系统上,它是1个字符的字符串:\n。这就是为什么你不能将它用作char。

维基百科有一篇关于换行的好文章: System.Environment.NewLine

我建议阅读。

答案 1 :(得分:5)

正如@Jesse Good指出的那样,字符串中可能会出现几种新行。正则表达式可用于匹配可能出现在字符串中的各种换行符:

var text = "line 1\rline 2\nline 3\r\nline 4";

/* A regular expression that matches Windows newlines (\r\n),
    Unix/Linux/OS X newlines (\n), and old-style MacOS newlines (\r).
    The regex is processed left-to-right, so the Windows newlines
    are matched first, then the Unix newlines and finally the
    MacOS newlines. */
var newLinesRegex = new Regex(@"\r\n|\n|\r", RegexOptions.Singleline);
var lines = newLinesRegex.Split(text);

Console.WriteLine("Found {0} lines.", lines.Length);

foreach (var line in lines)
  Console.WriteLine(line);

输出:

  

找到4行   第1行   第2行   第3行   第4行

答案 2 :(得分:2)

您必须使用String[]的{​​{3}}:

int numLines = copyText.Split(new[]{System.Environment.NewLine}, StringSplitOptions.None).Length - 1;