我想计算文本中的行数。
以下工作正常:
int numLines = copyText.Split('\n').Length - 1;
但是,我在整个代码中使用System.Environment.NewLine
并尝试使用时:
int numLines = copyText.Split(System.Environment.NewLine).Length - 1;
它不断提出一条红色的蠕动线在下面说明不能将字符串转换为char。一直试图纠正这个但没有运气。有没有人有任何想法?
答案 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;