目标文件:
Hello
World
代码:
if (file != null)
{
//Read file one character at a time
StreamReader reader;
reader = new StreamReader(file);
do
{
int s = reader.Read();
char sC = (char)s;
if (sC.Equals(Environment.NewLine))
{
Console.WriteLine("+1");
}
Console.WriteLine((char)s);
} while (!reader.EndOfStream);
reader.Close();
reader.Dispose();
}
输出:
H
e
l
l
o
W
o
r
l
d
所以(sC.Equals(Environment.NewLine))
显然在一次读取一个字符时没有检测到独立于平台的换行符。我该怎么做?
答案 0 :(得分:6)
试试这个
if (sC.Equals('\n'))
如果您确定在\r
之后总会有\n
,那么您可以通过另一个reader.Read();
电话吞下它。例如:
if (sC.Equals('\n')) {
reader.Read()
Console.WriteLine("+1");
}
答案 1 :(得分:2)
那是因为Environment.NewLine
是由String
组成的\r\n
(取决于您的环境,在Windows平台上它是\r\n
) - 这是Carrige Return和New Line字符 - 这是一对通常定义新行。
因此,将字符(可以是\n
或\r
)与\r\n
进行比较将始终产生false
相反,如@jurgen的回答中所述,请尝试与\n
进行比较。
答案 2 :(得分:0)
Environment.NewLine
实际上是两个字符:\ r \ n
你真的需要一次阅读一个字符吗?您不想使用StringReader
并使用ReadLine()吗?
答案 3 :(得分:0)
轻松删除\ n \ r
String text = "test\n\r";
if (text[text.Length - 1] == 10 && text[text.Length - 2] == 13)
text= text.Substring(0, text.Length - 2);
答案 4 :(得分:0)
使用此-
if (sC.Equals('\r'))
在您的情况下,由于'\ r'之前是'\ n'。