64 votos

Mejor manera de separar una cadena en las líneas

¿Cómo se reparte cadena multilínea en líneas?

Sé que de esta manera

var result = input.Split("\n\r".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

Parece un poco feo y pierde las líneas vacías. ¿Hay una mejor solución?

82voto

Konrad Rudolph Puntos 231505
  • Si se ve feo, simplemente eliminar la innecesaria ToCharArray llamada.

  • Si desea dividir por \n o \r, tienes dos opciones:

    • Utilizar un literal de matriz - pero esto le dará líneas vacías para Windows al estilo de los finales de línea \r\n:

      var result = text.Split(new [] { '\r', '\n' });
      
    • El uso de una expresión regular, como se indica por Bart:

      var result = Regex.Split(text, "\r\n|\r|\n");
      
  • Si desea conservar líneas vacías, ¿por qué decirle explícitamente C# que tiramos a la basura? (StringSplitOptions del parámetro) - StringSplitOptions.None lugar.

29voto

Bart Kiers Puntos 79069

Se puede utilizar Regex.Split:

string[] tokens = Regex.Split(input, @"\r?\n|\r");

Edit: añadido '|\r' a cuenta de terminadores de línea Mac (mayores).

4voto

Jonas Elfström Puntos 16453

Si quieres conservar vacía líneas simplemente quite el StringSplitOptions.

var result = input.Split(System.Environment.NewLine.ToCharArray());

2voto

JDunkerley Puntos 7237

Ligeramente retorcido, pero un bloque de iteradores para hacerlo:

public static IEnumerable<string> Lines(this string Text)
{
    int cIndex = 0;
    int nIndex;
    while ((nIndex = Text.IndexOf(Environment.NewLine, cIndex + 1)) != -1)
    {
        int sIndex = (cIndex == 0 ? 0 : cIndex + 1);
        yield return Text.Substring(sIndex, nIndex - sIndex);
        cIndex = nIndex;
    }
    yield return Text.Substring(cIndex + 1);
}

Puede llamar:

var result = input.Lines().ToArray();

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X