99 votos

¿Cómo se eliminan los saltos de línea de un archivo en Java?

¿Cómo puedo reemplazar todos los saltos de línea de una cadena en Java de tal manera que funcione en Windows y Linux (es decir, sin problemas específicos del sistema operativo de retorno de carro/alimentación de línea/nueva línea, etc.)?

Lo he intentado (nota readFileAsString es una función que lee un archivo de texto en un String):

String text = readFileAsString("textfile.txt");
text.replace("\n", "");

pero esto no parece funcionar.

¿Cómo se puede hacer esto?

182voto

Kaleb Brasee Puntos 25776

Necesitas establecer text a los resultados de text.replace() :

String text = readFileAsString("textfile.txt");
text = text.replace("\n", "").replace("\r", "");

Esto es necesario porque las cuerdas son inmutables llamando replace no cambia la cadena original, sino que devuelve una nueva que ha sido cambiada. Si no asignas el resultado a text entonces esa nueva cadena se pierde y se recoge la basura.

En cuanto a la obtención de la nueva línea String para cualquier ambiente - que está disponible llamando System.getProperty("line.separator") .

139voto

Stephen C Puntos 255558

Como se ha señalado en otras respuestas, su código no funciona principalmente porque String.replace(...) no cambia la cadena del objetivo. (No puede - las cadenas de Java son inmutables!) Lo que realmente hace es crear una nueva cadena con los caracteres cambiados según sea necesario. Pero su código entonces tira esa Cadena...


Aquí hay algunas soluciones posibles. La que sea más correcta depende de lo que exactamente estés tratando de hacer.

// #1
text = text.replace("\n", "");

Simplemente elimina todos los caracteres de la nueva línea. Esto no se aplica a las terminaciones de línea de Windows o Mac.

// #2
text = text.replace(System.getProperty("line.separator"), "");

Elimina todos los terminadores de línea de la plataforma actual. Esto no se aplica al caso de que se trate de procesar (por ejemplo) un archivo UNIX en Windows, o viceversa.

// #3
text = text.replaceAll("\\r|\\n", "");

Elimina todos los terminadores de línea de Windows, UNIX o Mac. Sin embargo, si el archivo de entrada es de texto, esto concatenará palabras; por ejemplo.

Goodbye cruel
world.

se convierte en

Goodbye cruelworld.

Así que puede que realmente quieras hacer esto:

// #4
text = text.replaceAll("\\r\\n|\\r|\\n", " ");

que reemplaza cada terminador de línea con un espacio.

8voto

Fabian Steeg Puntos 24261

Si quieres eliminar sólo los terminadores de línea válidos en el sistema operativo actual, podrías hacerlo:

text = text.replaceAll(System.getProperty("line.separator", ""));

Si quieres asegurarte de que eliminas los separadores de líneas, puedes hacerlo así:

text = text.replaceAll("\\r|\\n", "");

O, un poco más verborreico, pero menos regeyante:

text = text.replaceAll("\\r", "").replaceAll("\\n", "");

6voto

Aif Puntos 4603

Las rupturas de línea no son las mismas bajo Windows/linux/mac. Deberías usar System.getPropiedades con el atributo línea.separador.

2voto

Thomas Pornin Puntos 36984

Puede que quieras leer tu expediente con un BufferedReader . Esta clase puede dividir la entrada en líneas individuales, que se pueden ensamblar a voluntad. La forma en que BufferedReader opera reconoce las convenciones de terminación de línea de los mundos Linux, Windows y MacOS automáticamente, sin importar la plataforma actual.

Por lo tanto:

BufferedReader br = new BufferedReader(
    new InputStreamReader("textfile.txt"));
StringBuilder sb = new StringBuilder();
for (;;) {
    String line = br.readLine();
    if (line == null)
        break;
    sb.append(line);
    sb.append(' ');   // SEE BELOW
}
String text = sb.toString();

Tengan en cuenta que readLine() no incluye el terminador de línea en la cadena devuelta. El código anterior añade un espacio para evitar pegar la última palabra de una línea y la primera palabra de la siguiente 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:

X