web-dev-qa-db-fra.com

groovy: comment remplacerAll ')' avec ''

J'ai essayé ceci:

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

mais j'ai eu l'erreur suivante:

Exception org.codehaus.groovy.control.MultipleCompilationErrorsException: échec du démarrage, Script11.groovy: 3: caractère inattendu: '\' @ ligne 3, colonne 29. 1 erreur sur org.codehaus.groovy.control.ErrorCollector (failIfErrors: 296)

la question est donc comment puis-je faire ceci: 

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

Identique à Java:

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

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

33

Une manière plus Groovy: def str2 = str1.replaceAll(/\)/,' ')

25
John Stoneham

Vous devez échapper au \ à l'intérieur de la replaceAll

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

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 à l'aide de JsonSlurper ou XmlSlurper, puis du remplacement d'un caractère, l'exception suivante se produit:

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

Considérez l'exemple suivant,

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

Si l'on veut remplacer un caractère tel que '(' dans result par un ' ' par exemple, le code suivant retourne la 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('\\[',' ')
0
Ali Nem