2010-04-11 12 views
21

He intentado esto:maravilloso: cómo replaceAll ')' con ''

def str1="good stuff 1)" 
def str2 = str1.replaceAll('\)',' ') 

pero tengo el siguiente error:

Exception org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed, Script11.groovy: 3: unexpected char: '\' @ line 3, column 29. 1 error at org.codehaus.groovy.control.ErrorCollector(failIfErrors:296)

así que la pregunta es ¿cómo puedo hacer esto:

str1.replaceAll('\)',' ') 

Respuesta

26

Igual que en Java:

def str2 = str1.replaceAll('\\)',' ') 

Tienes que escapar de la barra invertida (con otra barra inclinada invertida).

4

tienes que escapar del interior del \replaceAll

def str2 = str1.replaceAll('\\)',' ') 
22

Una forma más maravillosa: def str2 = str1.replaceAll(/\)/,' ')

0

Las otras respuestas son correctas para este ejemplo concreto; sin embargo, en casos reales, por ejemplo al analizar un resultado utilizando JsonSlurper o XmlSlurper y luego sustitución de un carácter en el mismo, produce la excepción siguiente:

groovy.lang.MissingMethodException: No signature of method: java.util.ArrayList.replaceAll() is applicable for argument types 

Considérese el siguiente ejemplo,

def result = new JsonSlurper().parseText(totalAddress.toURL().text) 

Si uno quiere reemplazar un carácter como '(' en result con un ' ' por ejemplo, los siguientes rendimientos por encima de la Exception:

def subResult = result.replaceAll('\\(',' ') 

Esto se debe a que el método replaceAll de Java funciona solo para string tipos. Para que esto funcione, se debe agregar toString() al resultado de una variable definida usando def:

def subResult = result.toString().replaceAll('\\[',' ') 
Cuestiones relacionadas