2010-12-27 18 views
7

Tengo un archivo de texto .txt, que contiene algunas líneas .. Cargo el contenido usando el objeto RequestBuilder y divido el texto de respuesta con words = String.split (" \norte"); Pero me pregunto, ¿por qué el resultado es la contiene "\ n" parte .. Por ejemplo, mi texto:Strange String.split (" n") comportamiento

abc 
def 
ghi 

el resultado es,

words[0] = "abc\n" 
words[1] = "def\n" 
words[2] = "ghi\n" 

Cualquier ayuda es muy apreciada. Gracias por adelantado.

+2

¿Está seguro de que sus líneas terminan con '\ n'? Pueden terminar con '\ r \ n', o algo más, incluso. – Asaph

+0

ohh, puede ser posible, ¿me puede decir cómo puedo verificarlo? Entonces, ¿qué se crea cuando presiono Enter en mi editor de texto? – amateurs

+0

Siempre puedes .trim() el resultado y creo que eliminará lo que esté allí. –

Respuesta

8

retornos de carro de Windows ("\r\n") no debe hacer una diferencia visible a los resultados, ni debe necesita escapar de la expresión regular que pasa al String.split().

Aquí está la prueba tanto de la anterior utilizando str.split("\n"): http://ideone.com/4PnZi

Si hace tiene Windows retornos de carro sin embargo, usted debe (aunque estrictamente no es necesario) utilizar str.split("\r\n"): http://ideone.com/XcF3C

+0

¡Genial! su respuesta deja todo en claro, pero en el editor de texto, ¿cómo puedo hacer un texto que termine con \ n? entonces \ r \ n solo en windows? – amateurs

+0

@amateurs Muchas aplicaciones de Windows usarán '\ r \ n' para finalizar una línea, mientras que Linux y otras aplicaciones usan' \ n'. Si desea quitar los retornos de carro ('\ r') en Java, use' str.replaceAll ("\ r \ n", "\ n") '. Encontrar una aplicación de Windows que no use retornos de carro en primer lugar, que tendrá que preguntarle a alguien más. – marcog

+0

¡bien! Entiendo. gracias marcog! : D – amateurs

15

Intente utilizar string.split("\\n+"). O incluso mejor - split("[\\r\\n]+")

+0

+1 sí, este es el camino correcto. – Nishant

+6

, pero, ¿eso tampoco saltaría las líneas vacías? (tal vez deseado) –

+0

Esto no es necesario, ver mi respuesta. – marcog

2

Si dividida utiliza expresiones regulares se debe utilizar "\\ n" en lugar de "\ n"

+2

Split usa RegEx. – Powerlord

+0

genial. Gracias. No quería confiar en la memoria sin una doble verificación del documento. Entonces, dejé esto a OP para que lo mires. :) – Nishant

+0

Aunque 'String.split()' toma una expresión regular, esto no es necesario. – marcog

0

Es posible que también desee considere String[] lines = text.split("\\\\n");