我无法确定字符串是否为换行符。我使用的字符串是从Ultraedit使用DOS终结者CR / LF写的文件中读取的。我认为这等同于C#中的“\ r \ n”或Environment.NewLine。但是,当我执行这样的比较时,它似乎总是返回false:
if(str==Environment.NewLine)
任何人都知道这里发生了什么?
答案 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
...
}