2010-11-30 10 views
76

Me gustaría reemplazar todas las instancias de una subcadena en una cadena pero String.replaceAll() solo acepta un patrón. La cuerda que tengo proviene de un partido anterior. ¿Es posible agregar escapes al patrón que tengo o hay una versión de replaceAll() en otra clase que acepta una cadena literal en lugar de un patrón?String.replaceAll sin RegEx

+0

posible duplicado de [Backslash problema con String.replaceAll] (http://stackoverflow.com/questions/1701839/backslash-problem-with-string-replaceall) – McDowell

Respuesta

78

El método para agregar escapes es Pattern.quote().

String replaced = myString.replaceAll(Pattern.quote(matchingStr), replacementStr) 

Pero como dice Jon sólo puede utilizar replace(). A pesar de que se desvía del nombre replaceAll, reemplaza todas las ocurrencias como replaceAll().

+0

Funciona perfectamente si tiene un "$" en su matchingStr para ejemplo. –

+0

en lugar de Pattern.compile(); Pattern.quote() produce resultados no deseados –

+0

@PavloZvarych: 'Pattern.compile()' compila la cadena como una expresión regular, lo que significa que a los caracteres especiales se les dará un significado especial. Eso es todo lo contrario de lo que hace 'Pattern.quote()', y lo que el OP estaba pidiendo ('quote()' dice, "trata la cadena como un literal"). Tal vez podrías expandirte sobre los "resultados indeseables" de los que estás hablando. –

Cuestiones relacionadas