Was ist ein guter Weg, um jede Zeile eines mehrzeiligen Strings zu durchlaufen, ohne viel mehr Speicher zu verwenden (zum Beispiel ohne ihn in ein Array aufzuteilen)?
quelle
Was ist ein guter Weg, um jede Zeile eines mehrzeiligen Strings zu durchlaufen, ohne viel mehr Speicher zu verwenden (zum Beispiel ohne ihn in ein Array aufzuteilen)?
Ich schlage vor, eine Kombination aus StringReader
und meiner LineReader
Klasse zu verwenden, die Teil von MiscUtil ist, aber auch in dieser StackOverflow-Antwort verfügbar ist. Sie können einfach nur diese Klasse in Ihr eigenes Hilfsprojekt kopieren. Sie würden es so verwenden:
string text = @"First line
second line
third line";
foreach (string line in new LineReader(() => new StringReader(text)))
{
Console.WriteLine(line);
}
Looping über alle Linien in einem Körper von String - Daten (ob , dass eine Datei ist oder was auch immer) sind so verbreitet , dass es nicht den Aufruf Code erfordern sollte die Prüfung auf null etc werden :) das gesagt zu haben, wenn Sie sich eine tun wollen manuelle Schleife, dies ist die Form, die ich normalerweise gegenüber Fredriks bevorzuge:
using (StringReader reader = new StringReader(input))
{
string line;
while ((line = reader.ReadLine()) != null)
{
// Do something with the line
}
}
Auf diese Weise müssen Sie nur einmal auf Nichtigkeit testen und müssen auch nicht an eine do / while-Schleife denken (was aus irgendeinem Grund immer mehr Aufwand beim Lesen erfordert als eine gerade while-Schleife).
Sie können a verwenden StringReader
, um jeweils eine Zeile zu lesen:
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);
}
Ich weiß, dass dies beantwortet wurde, aber ich möchte meine eigene Antwort hinzufügen:
quelle
von MSDN für StringReader
quelle
Hier ist ein kurzer Codeausschnitt, der die erste nicht leere Zeile in einer Zeichenfolge findet:
quelle
Um diese alte Frage für .NET 4 zu aktualisieren, gibt es jetzt einen viel besseren Weg:
quelle
Versuchen Sie es mit der String.Split-Methode:
quelle