2012-06-15 22 views
21

Pregunta bastante básica para alguien que sabe.Reemplazar nueva línea/retorno con espacio usando regex

En lugar de ir de

"This is my text. 

And here is a new line" 

Para:

"This is my text. And here is a new line" 

me sale:

"This is my text.And here is a new line. 

Cualquier idea de por qué?

L.replaceAll("[\\\t|\\\n|\\\r]","\\\s"); 

Creo que encontré al culpable.

En la siguiente línea hago lo siguiente:

L.replaceAll("[^a-zA-Z0-9|^!|^?|^.|^\\s]", ""); 

Y esto parece ser la causa de mi problema.

¿Alguna idea de por qué?

Obviamente trato de hacer lo siguiente: eliminar todos los caracteres que no sean caracteres y eliminar todas las líneas nuevas.

+3

¿Podría simplemente hacer 'L.replaceAll (" [\\\ t | \\\ n | \\\ r] "," ");'? – benjer3

+0

intenté y parece que esto no funciona. –

+2

'L.replaceAll (" \\ s + "," ")'? –

Respuesta

44

\s es un acceso directo para caracteres en espacio en blanco en expresiones regulares. No tiene sentido en una cadena. ==> No puedes usarlo en tu cadena de reemplazo. Ahí tienes que poner exactamente el/los personaje (s) que deseas insertar. Si este es un espacio solo use " " como reemplazo.

La otra cosa es: ¿Por qué usa 3 barras invertidas como secuencia de escape? Dos son suficientes en Java. Y no necesita un | (operador de alternancia) en una clase de caracteres.

L.replaceAll("[\\t\\n\\r]+"," "); 

Observación

L no se cambia. Si usted quiere tener un resultado que tiene que hacer el código

String result =  L.replaceAll("[\\t\\n\\r]+"," "); 

prueba:

String in = "This is my text.\n\nAnd here is a new line"; 
System.out.println(in); 

String out = in.replaceAll("[\\t\\n\\r]+"," "); 
System.out.println(out); 
+0

'L.replaceAll (" [\\ t | \\ n | \\ r] "," ");' también parece no funcionar. –

+0

intenté esto también ahora. sin suerte. –

+1

Es posible que desee agregar un '+' después de la clase de caracteres, por lo que solo obtendrá un espacio para cada secuencia de caracteres en espacios en blanco. –

2

Su expresión regular es bueno Altough que lo reemplazaría con la cadena vacía

String resultString = subjectString.replaceAll("[\t\n\r]", ""); 

Se esperan un espacio entre "texto". y "Y" ¿no?

me sale ese espacio cuando intento la expresión regular copiando su muestra

"This is my text. " 

Así que todo está bien aquí. Quizás si lo reemplazas con la cuerda vacía funcionará. No sé por qué lo reemplazas con \ s. Y la alternancia | no es necesario en una clase de personaje.

+0

No estoy haciendo jave, pero ¿es realmente necesario poner un escape extra a personajes como \\ t? ¿No es suficiente? – buckley

+0

¿qué estás usando como editor de texto? –

+0

Ultraedit en Windows, por lo que la nueva línea es \ r \ n – buckley

7

Trate

L.replaceAll("(\\t|\\r?\\n)+", " "); 

Dependiendo del sistema de un salto de línea es bien \r\n o simplemente \n.

+0

Esto es incorrecto. '?' significa un signo de interrogación literal en una clase de caracteres (igual que '|' es un literal aquí también). Y cuatro barras invertidas son excesivas, incluso para Java. EDITAR: Pero eso es culpa de @ adarshr por no eliminar las barras invertidas adicionales al formatear la respuesta :) –

+0

Tiene razón. Esto con paranthesis debería funcionar sin embargo. – Keppil

+0

Oh, lo siento, no me di cuenta. Me alegra que esté arreglado ahora. – adarshr

3

Encontré this.

String newString = string.replaceAll("\n", " "); 

Aunque, como tiene una doble línea, obtendrá un espacio doble. Supongo que podrías hacer otro reemplazo para reemplazar espacios dobles con uno solo.

Si eso no funciona, trate de hacer:

string.replaceAll(System.getProperty("line.separator"), " "); 

Si creo líneas en "cadena" mediante el uso de "\ n" tuve que usar "\ n" en la expresión regular. Si utilicé System.getProperty() tuve que usar eso.

-1

Puede usar la primera división y volver a unir utilizando espacios en blanco. funcionará seguro.

String[] Larray = L.split("[\\n]+"); 
L = ""; 
for(int i = 0; i<Larray.lengh; i++){ 
    L = L+" "+Larray[i]; 
} 
Cuestiones relacionadas