我有一个要逐行读取的字符串,但我还需要有行分隔符,不幸的是 StringReader.ReadLine 会修剪它(与保存它的 ruby 不同)。实现这一目标的最快和最稳健的方法是什么?
我一直在考虑的替代方案:
- 每次读取输入的字符并检查行分隔符
- 将 RegExp.Split 与积极的前瞻一起使用
或者,我只关心行分隔符,因为我需要知道字符串中的实际位置,并且分隔符可以是一个字符或一个字符长。因此,如果我能取回光标在字符串中的实际位置也会很好,但 StringReader 没有这个功能。
编辑:这是我目前的实现。通过返回一个空字符串来指定文件结束。
StringBuilder line = new StringBuilder();
int r = _input.Read();
while (r >= 0)
{
char c = Convert.ToChar(r);
line.Append(c);
if (c == '\n') break;
if (c == '\r')
{
int peek = _input.Peek();
if (peek == -1) break;
if (Convert.ToChar(peek) != '\n') break;
}
r = _input.Read();
}
return line.ToString();