Apa cara yang baik untuk mengulang setiap baris dari string multiline tanpa menggunakan lebih banyak memori (misalnya tanpa membaginya menjadi sebuah array)?
sumber
Apa cara yang baik untuk mengulang setiap baris dari string multiline tanpa menggunakan lebih banyak memori (misalnya tanpa membaginya menjadi sebuah array)?
Saya sarankan menggunakan kombinasi StringReader
dan LineReader
kelas saya , yang merupakan bagian dari MiscUtil tetapi juga tersedia dalam jawaban StackOverflow ini - Anda dapat dengan mudah menyalin hanya kelas itu ke dalam proyek utilitas Anda sendiri. Anda akan menggunakannya seperti ini:
string text = @"First line
second line
third line";
foreach (string line in new LineReader(() => new StringReader(text)))
{
Console.WriteLine(line);
}
Perulangan atas semua baris dalam tubuh data string (apakah itu file atau apa pun) begitu umum bahwa itu seharusnya tidak memerlukan kode panggilan untuk menguji for dll :) Karena itu, jika Anda tidak ingin melakukan loop manual, ini adalah bentuk yang biasanya saya sukai daripada Fredrik:
using (StringReader reader = new StringReader(input))
{
string line;
while ((line = reader.ReadLine()) != null)
{
// Do something with the line
}
}
Dengan cara ini Anda hanya perlu menguji nullity sekali, dan Anda juga tidak perlu memikirkan loop do / while (yang karena alasan tertentu selalu membutuhkan lebih banyak usaha untuk membaca daripada loop sementara).
Anda dapat menggunakan a StringReader
untuk membaca baris dalam satu waktu:
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);
}
Saya tahu ini telah dijawab, tetapi saya ingin menambahkan jawaban saya sendiri:
sumber
dari MSDN untuk StringReader
sumber
Berikut cuplikan kode cepat yang akan menemukan baris tidak kosong pertama dalam sebuah string:
sumber
Untuk memperbarui pertanyaan kuno ini untuk .NET 4, sekarang ada cara yang jauh lebih rapi:
sumber
Coba gunakan Metode String.Split:
sumber