【问题标题】:How to split Environment.NewLine?如何拆分 Environment.NewLine?
【发布时间】:2015-06-13 23:24:34
【问题描述】:

我想计算文本的行数。

以下工作正常:

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

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

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

它一直在下面显示一条红色的蠕动线,说明无法将字符串转换为字符。一直试图纠正这个但没有运气。有人有什么想法吗?

【问题讨论】:

    标签: c#


    【解决方案1】:

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

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

    这是使用字符串数组的重载的reference

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

    维基百科有一篇关于换行的好文章: https://en.wikipedia.org/wiki/Newline

    我推荐阅读它。

    【讨论】:

    • 唯一的问题是虽然它修复了红线,但我无法执行计数,因为它应该有 5 行时返回 0:int numberOfChar = copyText.Length - numLines;
    • @user21255:你说copyText.Split('\n').Length - 1; 有效吗?如果使用System.Environment.NewLine时返回0,则表示该字符串不包含System.Environment.NewLine。一种解决方案是仅使用您以前的解决方案。这个字符串是从哪里来的?
    • 它来自一个富文本框,无论框中出现什么文本,copyText 都是该文本。文本实际上来自进入富文本框的文本文件。
    • @user21255:可能 txt 文件使用的是 unix 换行约定。你可以用记事本++stackoverflow.com/questions/1446370/text-editor-which-shows-r-n
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您必须使用带有String[]overload

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

      【讨论】:

      • 它解决了错误,但我遇到了一个与此相关的小问题,我在上述答案下的评论中提到了这一点。
      猜你喜欢
      • 1970-01-01
      • 2011-06-27
      • 2012-11-06
      • 2014-06-13
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 2021-03-12
      • 2011-11-12
      相关资源
      最近更新 更多