【问题标题】:Determine if string is newline in C#确定字符串是否是 C# 中的换行符
【发布时间】:2011-02-14 03:27:35
【问题描述】:

我无法确定字符串是否为换行符。我使用的字符串是从 Ultraedit 使用 DOS Terminators CR/LF 写入的文件中读取的。我认为这将等同于 C# 中的 "\r\n" 或 Environment.NewLine。但是,当我执行这样的比较时,它似乎总是返回 false:

if(str==Environment.NewLine)

有人知道这里发生了什么吗?

【问题讨论】:

    标签: c# newline


    【解决方案1】:

    如何读取这些行?如果您使用 StreamReader.ReadLine(或类似的东西),新行字符将不会出现在结果字符串中 - 它将是 String.Empty 或(即“”)。

    【讨论】:

    • 丹尼尔得到了正确答案。 File.ReadAllLine 不会在字符串中包含换行符。所以你实际上应该检查 String.Empty。
    • 当你使用 File.ReadAllLines 时,你为什么关心'\n'。你不会得到那个。相反,您将得到一个字符串数组中的所有行,并由 '\n' 分割。检查 File.ReadAllText 是否符合您的目的。
    【解决方案2】:

    你确定整个字符串只包含一个 NewLine 而没有更多或更少吗?您是否已经尝试过str.Contains(Environment.NewLine)

    【讨论】:

      【解决方案3】:

      最明显的故障排除步骤是检查 str 的实际值是多少。只需在调试器中查看或打印出来。

      【讨论】:

        【解决方案4】:

        换行符是“\r\n”,而不是“/r/n”。也许不仅仅是换行符......调试模式下的字符串值是什么?

        您可以使用新的 .NET 4.0 方法: String.IsNullOrWhiteSpace

        【讨论】:

          【解决方案5】:

          这是一个非常有效的问题。

          这就是答案。我发明了一种可以处理它的杂物。

          static bool StringIsNewLine(string s)
          {
              return (!string.IsNullOrEmpty(s)) &&
                  (!string.IsNullOrWhiteSpace(s)) &&
                  (((s.Length == 1) && (s[0] == 8203)) || 
                  ((s.Length == 2) && (s[0] == 8203) && (s[1] == 8203)));
          }
          

          像这样使用它:

          foreach (var line in linesOfMyFile)
          {
            if (StringIsNewLine(line)
            {
              // Ignore reading new lines
              continue;
            }
          
            // Do the stuff only for non-empty lines
            ...
          }
          

          【讨论】:

            猜你喜欢
            • 2012-04-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-10-21
            • 1970-01-01
            • 2015-03-18
            • 1970-01-01
            • 2018-12-06
            相关资源
            最近更新 更多