一次读取一个字符的文本文件时检测换行符
本文关键字:文本 文件 检测 换行符 一个 一次 读取 字符 | 更新日期: 2023-09-27 18:35:36
目标文件:
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))
一次读取一个字符时显然不会检测到与平台无关的换行符.. 我该怎么做?
试试这个
if (sC.Equals(''n'))
如果您确定'n
之后总会有'r
,那么您可以通过另一个reader.Read();
电话吞下它。例:
if (sC.Equals(''n')) {
reader.Read()
Console.WriteLine("+1");
}
那是因为Environment.NewLine
是由'r'n
组成的String
(取决于您的环境,在Windows平台上它是'r'n
的) - 这是Carrige Return和New Line字符 - 它是一对通常定义新行。
因此,将字符(可以是'n
或'r
)与'r'n
进行比较总是会产生false
相反,正如@jurgen d的回答中提到的,尝试与'n
进行比较。
Environment.NewLine
实际上是两个字符:''r'
你真的需要一次阅读一个字符吗?难道你不喜欢使用StringReader
并使用 ReadLine() 吗?
删除的简单方法 '''r
String text = "test'n'r";
if (text[text.Length - 1] == 10 && text[text.Length - 2] == 13)
text= text.Substring(0, text.Length - 2);
使用这个-
if (sC.Equals(''r'))
因为"''r"在您的情况下位于"'"之前。