6 ответов:
Я предлагаю использовать комбинацию
StringReaderи меняLineReaderкласс, который является частью MiscUtil но также доступны в этот ответ StackOverflow - вы можете легко скопировать только этот класс в свой собственный проект утилиты. Вы бы использовали его так:string text = @"First line second line third line"; foreach (string line in new LineReader(() => new StringReader(text))) { Console.WriteLine(line); }цикл по всем строкам в теле строковых данных (будь то файл или что-то еще) настолько распространен, что он не должен требовать, чтобы вызывающий код тестировался на null и т. д.:) сказав это, если ты do хотите сделать ручной цикл, это форма, которую я обычно предпочитаю по сравнению с Фредриком:
using (StringReader reader = new StringReader(input)) { string line; while ((line = reader.ReadLine()) != null) { // Do something with the line } }таким образом, вам нужно только один раз проверить на nullity, и вам не нужно думать о цикле do/while (который по какой-то причине всегда требует от меня больше усилий для чтения, чем прямой цикл while).
можно использовать
StringReaderчитать строки: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); }
от MSDN для 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);
Я знаю, что это был ответ, но я хотел бы добавить свой собственный ответ:
using (var reader = new StringReader(multiLineString)) { for (string line = reader.ReadLine(); line != null; line = reader.ReadLine()) { // Do something with the line } }
вот быстрый фрагмент кода, который найдет первую непустую строку в строке:
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 */ }
чтобы обновить этот древний вопрос для .NET 4, теперь есть гораздо более аккуратный способ:
var lines = File.ReadAllLines(filename); foreach (string line in lines) { Console.WriteLine(line); }
Comments