2010-04-11 15 views
21

J'ai essayé ceci:groovy: comment ReplaceAll ')' avec ''

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

mais je suis l'erreur suivante:

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)

si la question est de savoir comment ce que je fais:

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

Répondre

26

Identique à Java:

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

Vous devez échapper à la barre oblique inverse (avec un autre antislash).

4

Vous avez pour échapper à la \ à l'intérieur du replaceAll

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

Une façon plus Groovy: def str2 = str1.replaceAll(/\)/,' ')

0

Les autres réponses sont correctes pour cet exemple spécifique; Cependant, dans des cas réels, par exemple lors de l'analyse d'un résultat en utilisant JsonSlurper ou XmlSlurper puis remplacer un personnage en elle, l'exception suivante se produit:

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

Prenons l'exemple suivant,

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

Si un veut remplacer un caractère tel que '(' dans result avec un ' ' par exemple, les rendements suivants: l'Exception ci-dessus

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

Cela est dû au fait que la méthode replaceAll de Java ne fonctionne que pour les types string. Pour que cela fonctionne, toString() doit être ajouté au résultat d'une variable définie à l'aide de def:

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