2010-04-28 16 views
33

Quiero reemplazar todos los caracteres de espacio en blanco en una cadena con un "+" y todo "ß" con "ss" ... funciona bien para " ß", pero de alguna manera Eclipse no me deja utilizar \ s para un espacio en blanco .. he intentado '\ t' en su lugar, pero no funciona bien .. me sale el siguiente error:Java no funciona con regex s, dice: secuencia de escape no válida

Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \)

este es mi código:

try { 
    String temp1 = from.getText().toString(); 
    start_from = temp1.replaceAll("ß", "ss"); 
    start_from = start_from.replaceAll("\s", "+"); 
} 

¿Por qué no funciona? ¿Es un problema con Android, eclipse o qué?

gracias de antemano!

+1

Me sorprende que incluso pueda compilar \ s en un literal de cadena. Agregar \ t en un literal de cadena crearía una expresión regular que contiene un carácter de tabulación, en lugar de la expresión regular con \ t en él, para eso necesita \\ t en el literal de cadena. – Geoff

+0

No pude compilarlo, .. eclipse me dio este mensaje de error que publiqué. Solo quería que supieras lo que estaba tratando de hacer. – MJB

Respuesta

53

tiene que escapar de la barra

start_from = start_from.replaceAll("\\s", "+"); 
+3

¡gracias! sitio web increíble! :-) "No puede aceptar una respuesta en 11 minutos" ... ;-) – MJB

9

El problema es que \ es un carácter de escape en Java, así como patrones de expresiones regulares. Si desea que coincida con el patrón de expresión \n, por ejemplo, y que iría adelante y escribir

replaceAll("\n", "+"); 

El patrón de expresión no terminaría siendo \n por las que es siendo un salto de línea real, ya que es lo "\n" significa en Java. Si desea que el patrón contenga una barra diagonal inversa, deberá asegurarse de escapar de esa barra invertida, para que no se trate como un carácter especial dentro de la cadena.

replaceAll("\\s", "+"); 
+0

¡gracias también! :-) – MJB

1

Puede utilizar la clase java.util.regex.Pattern y usar algo como p = Pattern.compile("\s"); en combinación con p.matcher(start_from).replaceAll("+"). Alternativamente, simplemente escapa de tu metacaracter "\ s" como "\\ s".

+0

jepp Ya usé un patrón en otra parte de mi código, sin embargo, pensé que sería más fácil en este caso simplemente usar replaceAll (..) ¡gracias! – MJB

+0

'Pattern.compile (" \ s ")' sigue siendo un error de sintaxis de Java. –

Cuestiones relacionadas