在C#中判断字符串是否为换行符

5

我无法确定一个字符串是不是换行符。我使用的字符串是从一个由Ultraedit编写,使用DOS终止符CR/LF的文件中读取的。我认为这相当于C#中的"\r\n"或Environment.NewLine。然而,当我进行如下比较时,它似乎总是返回false:

if(str==Environment.NewLine)

有谁知道这里在发生什么?

(这句话涉及 IT 技术,需要根据具体语境翻译。)
5个回答

7

这段代码是如何读取文本中的行的呢?如果你正在使用StreamReader.ReadLine(或类似的方法),那么换行符将不会出现在结果字符串中——它将是String.Empty或(i.e. "")。


丹尼尔得到了正确的答案。File.ReadAllLine不会将换行符包含在字符串中。因此,您实际上应该检查String.Empty。 - Amry
当您使用File.ReadAllLines时,为什么要关心'\n'?您将得不到它。相反,您将得到所有文本行的字符串数组,这些行已通过'\n'拆分。请检查一下File.ReadAllText是否符合您的需求。 - Amsakanna

6

您确定整个字符串只包含一个换行符,没有多余的内容吗?您是否已经尝试过str.Contains(Environment.NewLine)


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

2

换行符应该是"\r\n",而不是"/r/n"。也许除了换行符还有其他问题……在调试模式下字符串的值是什么?

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


1

这是一个非常有价值的问题。

以下是答案。我发明了一个解决方案来解决它。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接