Câu trả lời:
Tôi đề nghị sử dụng kết hợp StringReader
và LineReader
lớp của tôi , là một phần của MiscUtil nhưng cũng có sẵn trong câu trả lời StackOverflow này - bạn có thể dễ dàng sao chép chỉ lớp đó vào dự án tiện ích của riêng mình. Bạn sẽ sử dụng nó như thế này:
string text = @"First line
second line
third line";
foreach (string line in new LineReader(() => new StringReader(text)))
{
Console.WriteLine(line);
}
Looping trên tất cả các dòng trong một cơ thể của dữ liệu chuỗi (cho dù đó là một tập tin hoặc bất cứ điều gì) là rất phổ biến mà nó không nên yêu cầu mã gọi hàm được thử nghiệm for null vv :) Có nói rằng, nếu bạn làm muốn làm một vòng lặp thủ công, đây là hình thức mà tôi thường thích hơn Fredrik's:
using (StringReader reader = new StringReader(input))
{
string line;
while ((line = reader.ReadLine()) != null)
{
// Do something with the line
}
}
Bằng cách này, bạn chỉ phải kiểm tra tính vô hiệu một lần và bạn cũng không phải nghĩ về vòng lặp do / while (vì lý do nào đó tôi luôn mất nhiều công sức để đọc hơn vòng lặp while thẳng).
Bạn có thể sử dụng một StringReader
để đọc một dòng tại một thời điểm:
using (StringReader reader = new StringReader(input))
{
string line = string.Empty;
do
{
line = reader.ReadLine();
if (line != null)
{
// do something with the line
}
} while (line != null);
}
từ MSDN cho StringReader
string textReaderText = "TextReader is the abstract base " +
"class of StreamReader and StringReader, which read " +
"characters from streams and strings, respectively.\n\n" +
"Create an instance of TextReader to open a text file " +
"for reading a specified range of characters, or to " +
"create a reader based on an existing stream.\n\n" +
"You can also use an instance of TextReader to read " +
"text from a custom backing store using the same " +
"APIs you would use for a string or a stream.\n\n";
Console.WriteLine("Original text:\n\n{0}", textReaderText);
// From textReaderText, create a continuous paragraph
// with two spaces between each sentence.
string aLine, aParagraph = null;
StringReader strReader = new StringReader(textReaderText);
while(true)
{
aLine = strReader.ReadLine();
if(aLine != null)
{
aParagraph = aParagraph + aLine + " ";
}
else
{
aParagraph = aParagraph + "\n";
break;
}
}
Console.WriteLine("Modified text:\n\n{0}", aParagraph);
Đây là đoạn mã nhanh sẽ tìm thấy dòng không trống đầu tiên trong một chuỗi:
string line1;
while (
((line1 = sr.ReadLine()) != null) &&
((line1 = line1.Trim()).Length == 0)
)
{ /* Do nothing - just trying to find first non-empty line*/ }
if(line1 == null){ /* Error - no non-empty lines in string */ }
Hãy thử sử dụng Phương pháp String.Split:
string text = @"First line
second line
third line";
foreach (string line in text.Split('\n'))
{
// do something
}