确定字符串是否是C#中的换行符

时间:2010-04-30 07:56:23

标签: c# newline

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

if(str==Environment.NewLine)

任何人都知道这里发生了什么?

5 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:4)

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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

这是答案。我发明了一个可以解决这个问题的拖把。

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
  ...
}