reemplace \ n y \ r \ n con en java

Esto se ha pedido varias veces para varios idiomas, pero no puedo hacerlo funcionar. Tengo una cadena como esta

String str = "This is a string.\nThis is a long string."; 

Y estoy tratando de reemplazar el \n con
usando

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

pero el \n no se reemplaza. Traté de usar esta herramienta de registro para verificar y veo el mismo resultado. La cadena de entrada no tiene una coincidencia para "(\r\n|\n)" . Qué estoy haciendo mal ?

Esto funciona para mi.

 public class Program { public static void main(String[] args) { String str = "This is a string.\nThis is a long string."; str = str.replaceAll("(\r\n|\n)", "
"); System.out.println(str); } }

Resultado:

 Esto es una cadena. 
Esta es una cadena larga.

Tu problema está en otro lado.

Una versión un poco más robusta de lo que estás intentando:

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

Para mí, esto funcionó:

 rawText.replaceAll("(\\\\r\\\\n|\\\\n)", "\\\n"); 

Consejo: use el probador de expresiones regulares para realizar pruebas rápidas sin comstackr en su entorno

Como mi cuenta es nueva, no puedo votar la respuesta de Nino van Hooff. Si sus cadenas provienen de una fuente basada en Windows, como un servidor basado en aspx, esta solución funciona:

 rawText.replaceAll("(\\\\r\\\\n|\\\\n)", "
");

Parece ser un problema extraño de conjunto de caracteres, ya que las dobles barras diagonales inversas se interpretan como caracteres de escape de barra única. De ahí la necesidad de las barras cuádruples arriba.

De nuevo, en la mayoría de las circunstancias "(\\r\\n|\\n)" debería funcionar, pero si sus cadenas provienen de una fuente basada en Windows intente lo anterior.

Solo un FYI intentó todo para corregir el problema que estaba teniendo al reemplazar esos finales de línea. Al principio se pensó que la conversión de Windows-1252 a UTF-8 había fallado. Pero eso tampoco funcionó. Esta solución es lo que finalmente funcionó. 🙂

Esto funciona para mi. El código de Java funciona exactamente como lo escribiste. En el probador, la cadena de entrada debe ser:

 This is a string. This is a long string. 

… con un salto de línea real. No puedes usar:

 This is a string.\nThis is a long string. 

… porque trata \n como la secuencia inversa de la secuencia literal ‘n’ .

Eso debería funcionar, pero no te mates tratando de resolverlo. Solo usa 2 pases.

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

Descargo de responsabilidad: esto no es muy eficiente.

Esto debería funcionar. Tienes que poner dos barras

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

En esta referencia , hay un ejemplo que muestra

 private final String REGEX = "\\d"; // a single digit 

¡He usado dos barras en muchos de mis proyectos y parece funcionar bien!