2011-04-07 12 views
5

Estoy confundido con cuál es la forma correcta de romper líneas.Cómo romper una cuerda en las líneas

leí en alguna parte que utilizan ventanas \ r \ n para romper las líneas, pero estos dos códigos producir la misma

regex.split(sometext, "\r\n"); 
regex.split(sometext, "\n"); 

Cuál es la forma correcta ?, estas expresiones siempre producen el mismo?

+0

Primero, esto no es C#. .Net tiene 'Regex.Split'. A continuación, puede proporcionar más detalles: ¿necesita conservar líneas vacías? ¿De dónde provienen los datos? – Kobi

+0

@Kobi Podría haber escrito esto de memoria, lo que podría explicar la carcasa incorrecta. – NKCSS

+0

@NKCSS - Esa es una práctica muy pobre al hacer una pregunta ':)' – Kobi

Respuesta

3

Si quieres apoyar caracteres de nueva línea para cada plataforma (por ejemplo, que necesita para analizar los archivos de entrada, creados bajo Linux/Windows/Mac en su ASP.NET sitio web) y no llevar sobre cadenas vacías, Es mejor utilizar este método en lugar:

myString.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries) 

Esto devolverá

["one","two","three"] 

para la cadena de entrada

"one\r\ntwo\n\n\nthree" 

Actualización: Si necesita transportar líneas vacías, puede usar

myString.Replace("\r\n", "\n").Split("\n") 

Esto debería funcionar para los archivos de caracteres EOL "\ r \ n" y "\ n".

+0

gran idea que voy a usarlo. Y si la cadena tiene una terminación heterogénea podría agregar una reemplazar más para eliminar (muy improbablemente pasar) invisibles CR .... myString.Replace ("\ r \ n", "\ n"). Replace ("\ r "," "). split (" \ n ") – mjsr

12

Uso

var myArray = sometext.Split(Environment.NewLine); 

Environment.NewLine recogerá el correcto para su sistema operativo. Esto fallará si los datos se crearon en un sistema diferente. Algo que podría funcionar en todos los sistemas, pero tienen algunas consecuencias no deseadas es

var myArray = sometext.Split(new[] {'\r', '\n'}, 
    StringSplitOptions.RemoveEmptyEntries); 

Algunas posibles cosas preocupantes es que va a eliminar todas las líneas vacías y dividida en retornos de carro.

2

\ r es un carriage return \ n es un newline.

Windows usa \ r \ n por defecto (Environment.NewLine) .

[reescrito para aclarar la parte Environment.NewLine]

Para obtener los caracteres correctos para dividir el texto en, puede utilizar Environment.NewLine, que informará de los caracteres correctos en base a su plataforma.

+0

@NKCSS: Básicamente repitiste la información dada en la pregunta original e ignoraste la pregunta en sí. Por favor considere mejorar su respuesta. – blubb

+0

@Simon Stelling: Yo impugno eso. La pregunta obviamente indica que él no conoce la diferencia entre \ r \ n y \ n. También explico por qué se usa \ r \ n (Windows predeterminado) y traté de sugerir el uso de Environment.NewLine de aquí en adelante. – NKCSS

+0

@Simon Stelling: es una evaluación dura. La respuesta podría mejorarse, pero no creo que mereciera la aprobación negativa (quienquiera que fuera). –

0

Por las razones mencionadas en otras respuestas, solo haga lo que dice EDIT. Ambos son bien, sin embargo, personalmente me gustaría usar:

regex.split(sometext, "\n"); 

EDIT:

USO Environment.NewLine como se sugiere en otras respuestas.

+0

Environment.NewLine es el camino a seguir; su ejemplo deja el texto con \ r char en algunos escenarios, lo cual es indeseable. – NKCSS

0
regex.split(sometext, "\r\n"); 

sería la manera de hacerlo.

El motivo, ambos parecen dar el mismo resultado es porque, "\ n" rompe la cadena después de "\ r". Por lo tanto, tiene una subcadena con un "\ r" final, lo que no será obvio a menos que lo mire con cuidado con un editor hexadecimal o algo así.

Dicho esto me gustaría sugerir el uso de Environment.NewLine en lugar de "\ r \ n"

Cuestiones relacionadas