Каков хороший способ перебрать каждую строку многострочной строки без использования гораздо большего объема памяти (например, без разделения ее на массив)?
источник
Каков хороший способ перебрать каждую строку многострочной строки без использования гораздо большего объема памяти (например, без разделения ее на массив)?
Я предлагаю использовать комбинацию StringReader
и мой LineReader
класс, который является частью MiscUtil, но также доступен в этом ответе StackOverflow - вы можете легко скопировать только этот класс в свой собственный служебный проект. Вы бы использовали это так:
string text = @"First line
second line
third line";
foreach (string line in new LineReader(() => new StringReader(text)))
{
Console.WriteLine(line);
}
Цикл по всем строкам в теле строковых данных (будь то файл или что-то еще) настолько распространен, что не должен требовать, чтобы вызывающий код проверял на ноль и т. Д. :) Сказав это, если вы действительно хотите сделать ручной цикл, это форма, которую я обычно предпочитаю Фредрику:
using (StringReader reader = new StringReader(input))
{
string line;
while ((line = reader.ReadLine()) != null)
{
// Do something with the line
}
}
Таким образом, вам нужно только один раз проверить значение null, и вам не нужно думать о цикле do / while (который по какой-то причине всегда требует больше усилий для чтения, чем простой цикл while).
Вы можете использовать a, 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
источник
Вот небольшой фрагмент кода, который найдет первую непустую строку в строке:
источник
Чтобы обновить этот древний вопрос для .NET 4, теперь есть более простой способ:
источник
Попробуйте использовать метод String.Split:
источник