389 votos

La manera más fácil para dividir una cadena en los saltos de línea en Net?

Tengo que dividir una cadena en nuevas líneas en NET y la única manera que conozco para dividir cadenas es con el método Split. Sin embargo eso no me va a permitir (fácilmente) dividida en una nueva línea, así que ¿cuál es la mejor manera de hacerlo?

668voto

Guffa Puntos 308133

Para dividir una cadena que necesita usar el sobrecarga que toma una matriz de cadenas:

 string[] lines = theText.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
 

Edit:
Si desea manejar diferentes tipos de saltos de línea en un texto, puede utilizar la capacidad de coincidir más de una cadena. Esto dividirá correctamente en cualquier tipo de salto de línea, y preservar las líneas vacías y espacios en el texto:

 string[] lines = theText.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);
 

46voto

Clément Puntos 1439

¿Qué pasa con el uso de un StringReader ?

 using (System.IO.StringReader reader = new System.IO.StringReader(input)) {
    string line = reader.ReadLine();
}
 

26voto

nikmd23 Puntos 5780

Usted debe ser capaz de dividir la cadena con bastante facilidad, así:

 aString.Split(Environment.NewLine.ToCharArray());
 

13voto

Erwin Mayer Puntos 3427

Con base en la respuesta de Guffa, en una clase de extensión, utilice:

 public static string[] Lines(this string source) {
    return source.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);
}
 

6voto

Colonel Panic Puntos 18390

Para una variable de cadena s:

s.Split(new string[]{Environment.NewLine},StringSplitOptions.None)

Este utiliza su entorno en la definición de los finales de línea. En Windows, los finales de línea son CR-LF (retorno de carro, avance de línea) o en C#'s el escape de caracteres \r\n.

Esta es una solución fiable, porque si se recombinan las líneas con String.Join, esto es igual a su cadena original:

var lines = s.Split(new string[]{Environment.NewLine},StringSplitOptions.None);
var reconstituted = String.Join(Environment.NewLine,lines);
Debug.Assert(s==reconstituted);

Qué no hacer:

  • Uso StringSplitOptions.RemoveEmptyEntries, porque esto va a romper marcado como el de las Rebajas, donde líneas vacías han sintáctica propósito.
  • Split en el separador new char[]{Environment.NewLine}, porque en Windows esto creará una cadena vacía elemento para cada nueva línea.

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: