C# 如何拆分Environment.NewLine?

C# 如何拆分Environment.NewLine?,c#,C#,我想数一数文本中的行数 以下工程罚款: int numLines = copyText.Split('\n').Length - 1; 但是,我一直在我的整个代码中使用System.Environment.NewLine,当我尝试时: int numLines = copyText.Split(System.Environment.NewLine).Length - 1; 它一直在下面显示一条红色的蠕动线,表示无法将字符串转换为字符。我一直在试图纠正这一点,但运气不佳。有人有什么想法吗?您

我想数一数文本中的行数

以下工程罚款:

int numLines = copyText.Split('\n').Length - 1;
但是,我一直在我的整个代码中使用
System.Environment.NewLine
,当我尝试时:

 int numLines = copyText.Split(System.Environment.NewLine).Length - 1;
它一直在下面显示一条红色的蠕动线,表示无法将字符串转换为字符。我一直在试图纠正这一点,但运气不佳。有人有什么想法吗?

您必须使用带
字符串[]

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

要在换行符上拆分,可以使用以下命令:

copyText.Split(new string[] { System.Environment.NewLine },
               StringSplitOptions.None).Length - 1;
下面是使用字符串数组的重载的一个示例

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

维基百科有一篇关于新词的好文章:


我建议您阅读。

正如@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行


唯一的问题是,虽然它修复了红线,但我无法执行计数,因为当应该有5行时,它返回0:
int numberOfChar=copyText.Length-numLines
@user21255:你说的是
copyText.Split('\n')。Length-1工作正常吗?如果使用
System.Environment.NewLine
时返回
0
,则表示字符串不包含
System.Environment.NewLine
。一种解决方案是只使用以前的解决方案。这个字符串来自哪里?它来自一个富文本框,框中显示的任何文本,copyText就是该文本。文本实际上来自一个进入富文本框的文本文件。@user21255:可能该txt文件使用的是unix换行符约定。您可以使用notepad++进行检查,它解决了错误,但我有一个小问题与此相关,我在上面答案下的评论中提到了这个问题。