quitar - ¿Cómo eliminar saltos de línea de un archivo en Java?
eliminar saltos de linea java (16)
Como se señaló en otras respuestas, su código no funciona principalmente porque String.replace(...)
no cambia la Cadena de destino. (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 tu código luego tira esa cadena ...
Aquí hay algunas soluciones posibles. Cuál es el más correcto depende de lo que está intentando hacer exactamente.
// #1
text = text.replace("/n", "");
Simplemente elimina todos los caracteres de nueva línea. Esto no hace frente 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 para la plataforma actual. Esto no resuelve el caso en el que está intentando 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 texto, esto concatenará palabras; p.ej
Goodbye cruel
world.
se convierte en
Goodbye cruelworld.
Así que quizás quieras hacer esto:
// #4
text = text.replaceAll("//r//n|//r|//n", " ");
que reemplaza cada terminador de línea con un espacio.
¿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, no hay problemas específicos del sistema operativo de retorno de carro / avance de línea / nueva línea, etc.)?
Lo he intentado (nota readFileAsString es una función que lee un archivo de texto en una cadena):
String text = readFileAsString("textfile.txt");
text.replace("/n", "");
Pero esto no parece funcionar.
¿Cómo se puede hacer esto?
Es posible que desee leer su archivo con un BufferedReader
. Esta clase puede dividir la entrada en líneas individuales, que puede ensamblar a voluntad. La forma en que funciona BufferedReader
reconoce las convenciones de final de línea de los mundos de Linux, Windows y MacOS de forma automática, independientemente de 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();
Tenga en cuenta que readLine()
no incluye el terminador de línea en la cadena devuelta. El código anterior agrega un espacio para evitar pegar la última palabra de una línea y la primera palabra de la siguiente línea.
Esto sería eficiente, supongo.
String s;
s = "try this/n try me.";
s.replaceAll("[//r//n]+", "")
editado para resaltar la sintaxis
Intenta hacer esto:
textValue= textValue.replaceAll("/n", "");
textValue= textValue.replaceAll("/t", "");
textValue= textValue.replaceAll("//n", "");
textValue= textValue.replaceAll("//t", "");
textValue= textValue.replaceAll("/r", "");
textValue= textValue.replaceAll("//r", "");
textValue= textValue.replaceAll("/r/n", "");
textValue= textValue.replaceAll("//r//n", "");
Los saltos de línea no son los mismos en windows / linux / mac. Debe usar System.getProperties con el atributo line.separator.
Me parece extraño que (Apache) StringUtils no estuviera cubierto aquí todavía.
puede eliminar todas las nuevas líneas (o cualquier otra aparición de una subcadena) de una cadena usando el método .replace
StringUtils.replace(myString, "/n", "");
Esta línea reemplazará todas las líneas nuevas con la cadena vacía.
porque la nueva línea es técnicamente un carácter que puede usar opcionalmente el método .replaceChars
que reemplazará los caracteres
StringUtils.replaceChars(myString, ''/n'', '''');
Para tu información, si quieres reemplazar las roturas muti-lineas simultáneas con un salto de línea, entonces puedes usar
myString.trim().replaceAll("[/n]{2,}", "/n")
O reemplazar con un solo espacio
myString.trim().replaceAll("[/n]{2,}", " ")
Puede usar Apache commons IOUtils para iterar a través de la línea y agregar cada línea a StringBuilder. Y no te olvides de cerrar el InputStream
StringBuilder sb = new StringBuilder();
FileInputStream fin=new FileInputStream("textfile.txt");
LineIterator lt=IOUtils.lineIterator(fin, "utf-8");
while(lt.hasNext())
{
sb.append(lt.nextLine());
}
String text = sb.toString();
IOUtils.closeQuitely(fin);
Puede utilizar métodos genéricos para reemplazar cualquier char con cualquier char.
public static void removeWithAnyChar(String str, char replceChar,
char replaceWith) {
char chrs[] = str.toCharArray();
int i = 0;
while (i < chrs.length) {
if (chrs[i] == replceChar) {
chrs[i] = replaceWith;
}
i++;
}
}
Si desea eliminar solo los terminadores de línea que son válidos en el sistema operativo actual, puede hacer esto:
text = text.replaceAll(System.getProperty("line.separator"), "");
Si desea asegurarse de eliminar cualquier separador de línea, puede hacerlo de la siguiente manera:
text = text.replaceAll("//r|//n", "");
O, un poco más detallado, pero menos regexy:
text = text.replaceAll("//r", "").replaceAll("//n", "");
org.apache.commons.lang.StringUtils # chopNewline
Esta función normaliza todos los espacios en blanco, incluidos los saltos de línea, a espacios individuales. No es exactamente lo que pidió la pregunta original, pero es probable que haga exactamente lo que se necesita en muchos casos:
import org.apache.commons.lang3.StringUtils;
final String cleansedString = StringUtils.normalizeSpace(rawString);
text.replace()
establecer el text
en los resultados de text.replace()
:
String text = readFileAsString("textfile.txt");
text = text.replace("/n", "").replace("/r", "");
Esto es necesario porque las cadenas son inmutables: la replace
llamadas no cambia la cadena original, devuelve una nueva que se ha cambiado. Si no asigna el resultado al text
, esa nueva Cadena se pierde y se recolecta la basura.
En cuanto a obtener la Cadena de nueva línea para cualquier entorno, está disponible llamando a System.getProperty("line.separator")
.
String text = readFileAsString("textfile.txt").replace("/n","");
.replace devuelve una nueva cadena, las cadenas en Java son inmutables.
String text = readFileAsString("textfile.txt").replaceAll("/n", "");
A pesar de que la definición de trim () en el sitio web de Oracle es "Devuelve una copia de la cadena, con espacios en blanco iniciales y finales omitidos".
la documentación omite decir que también se eliminarán los nuevos caracteres de línea (iniciales y finales).
En pocas palabras String text = readFileAsString("textfile.txt").trim();
También trabajará para ti. (Comprobado con Java 6)
str = str.replaceAll("//r//n|//r|//n", " ");
Funcionó perfectamente para mí después de buscar mucho, después de haber fallado con todas las demás líneas.