¿Cuál es una buena manera de recorrer cada línea de una cadena de varias líneas sin usar mucha más memoria (por ejemplo, sin dividirla en una matriz)?
fuente
¿Cuál es una buena manera de recorrer cada línea de una cadena de varias líneas sin usar mucha más memoria (por ejemplo, sin dividirla en una matriz)?
Sugiero usar una combinación de StringReader
y mi LineReader
clase, que es parte de MiscUtil pero también está disponible en esta respuesta de StackOverflow : puede copiar fácilmente solo esa clase en su propio proyecto de utilidad. Lo usarías así:
string text = @"First line
second line
third line";
foreach (string line in new LineReader(() => new StringReader(text)))
{
Console.WriteLine(line);
}
Bucle sobre todas las líneas de un conjunto de datos de cadena (ya sea un archivo o lo que sea) es tan común que no debería requerir el código de llamada a ser nula para probar etc :) Dicho esto, si usted no quiere hacer una bucle manual, esta es la forma que normalmente prefiero a la de Fredrik:
using (StringReader reader = new StringReader(input))
{
string line;
while ((line = reader.ReadLine()) != null)
{
// Do something with the line
}
}
De esta manera, solo tiene que probar la nulidad una vez, y tampoco tiene que pensar en un bucle do / while (que por alguna razón siempre me cuesta más leer que un bucle while directo).
Puede usar a StringReader
para leer una línea a la vez:
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);
}
Sé que esto ha sido respondido, pero me gustaría agregar mi propia respuesta:
fuente
de MSDN para StringReader
fuente
Aquí hay un fragmento de código rápido que encontrará la primera línea no vacía en una cadena:
fuente
Para actualizar esta antigua pregunta para .NET 4, ahora hay una forma mucho más ordenada:
fuente
Intente usar el método String.Split:
fuente