2009-03-04 23 views

Respuesta

74

tiene que escapar del + para la expresión regular, usando \.

Sin embargo, Java utiliza un parámetro de cadena para construir expresiones regulares, que utiliza \ por sus propias secuencias de escape. Así que hay que escapar de la \ sí:

"\\+" 
+1

que tienen la mala costumbre de utilizar s '/' en la construcción de la expresión regular y luego ejecutar .replace ('/', '\\'), de modo que no tengo que escribir "\\\\" para que coincida con una barra invertida literal. –

+2

Si desea reemplazar una cadena fija, Pattern.quote (String) es un amigo muy agradable. – gustafc

13

Tendrá que escapar del + con una \ y porque \ es en sí misma un carácter especial en las cadenas de Java que necesita para escapar de ella con otra \.

Así que su cadena de expresiones regulares se definirá como "\\ +" en el código de Java.

I.e. este ejemplo:

String test = "ABCD+EFGH"; 
test = test.replaceAll("\\+", "-"); 
System.out.println(test); 
29

en caso de duda, dejar que java hacer el trabajo por usted:

myStr.replaceAll(Pattern.quote("+"), replaceStr); 
+0

Esa es una buena técnica, gracias. –

+0

eso no es suficiente. el replaceStr también necesita ser citado para cosas de reemplazo. ¿por qué no usar simplemente 'myStr.replace ("+", replaceStr) ' – user102008

+0

¿Por qué habría que citar el replaceStr? String.replace() no reemplaza todas las apariciones. – FelixM

3

Si quieres una cadena sencilla de buscar y reemplazar (es decir, que Don 't necesidad de expresiones regulares), puede ser más sencillo usar el StringUtils from Apache Commons, lo que permitirá escribir:

mystr = StringUtils.replace(mystr, "+", "plus"); 
+0

thx para señalar esto. me ayudó a recordar el uso de esta solución no regex en casos simples. –

+1

no equivale a usar mystr.replace ("+", "plus")? replace no usa regex (mientras que replaceAll lo hace). – Vinze

1

Otros ya han declarado el método correcto de:

  1. Escapar de la + como \\+
  2. Utilizando el método Pattern.quote que escapa a todos los meta-caracteres de expresiones regulares.

Otro método que puede utilizar es poner el + en una clase de caracteres. Muchos de los metacaracteres de expresiones regulares (., *, + entre muchos otros) se tratan literalmente en la clase de caracteres.

Así también se puede hacer:

orgStr.replaceAll("[+]",replaceStr); 

Ideone Link

2

Digamos que desea reemplazar - con \\\-, utilice:

text.replaceAll("-", "\\\\\\\\-"); 
1
String str="Hello+Hello"; 
str=str.replaceAll("\\+","-"); 
System.out.println(str); 

O

String str="Hello+Hello"; 
str=str.replace(Pattern.quote(str),"_"); 
System.out.println(str); 
+1

¿No debería ser el segundo ejemplo 'Pattern.quote (" + ")' y no 'Pattern.quote (str)'? –

Cuestiones relacionadas