我有一個字符串,我想逐行閱讀,但我還需要有行分隔符字符,該StringReader.ReadLine不幸修剪(不像在紅寶石保存的地方)。什麼是最快和最健壯的方式來完成這一點?在c#中讀取一行而不修剪行分隔符
替代我一直在思考:
- 讀取輸入字符一個字符,並檢查線路,每次
- 分隔符使用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();
有可能是另一種選擇我的答案,但它取決於在數據的來源:它是某種形式的流,或者是源只是一個簡單的字符串? – Aaronaught 2010-02-06 23:38:55
我相信他們會不一致,我不能改變輸入,這被認爲是隻讀的(克隆字符串和改變不會做,因爲我需要在原始字符串內的字符位置)。輸入是一個純字符串,但是。 – SztupY 2010-02-06 23:56:50
在你對下面的Aaronaught的評論中你寫道:「設計爲與mono和.net2兼容......所以不能做出任何假設」:對於那些是唯一的行結束符,你是不是有一些有效的假設你正在解析的字符串的來源? – BillW 2010-02-07 00:18:16