2010-04-11 23 views
21

Ich versuchte dies:groovy: Wie replaceAll ')' mit ''

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

, aber ich habe den folgenden Fehler:

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)

so die Frage ist, wie kann ich dies tun:

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

Antwort

26

Gleiche wie in Java:

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

Sie müssen den Backslash (mit einem anderen Backslash) umgehen.

4

Sie haben die \ innerhalb der replaceAll

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

A mehr Groovy Art und Weise zu entkommen: für dieses spezielle Beispiel def str2 = str1.replaceAll(/\)/,' ')

0

Die anderen Antworten sind richtig; jedoch in realen Fällen, zum Beispiel, wenn ein Ergebnis Parsen JsonSlurper oder XmlSlurper und anschließend ein Zeichen in ihm zu ersetzen, wird die folgende Ausnahme auftritt:

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

das folgende Beispiel betrachtet,

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

Wenn man will ein Zeichen wie in '('result mit einem ' ' beispielsweise ersetzen, werden die folgenden kehrt die obige Exception:

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

Dies ist aufgrund der Tatsache, dass die replaceAll-Methode von Java nur für string Typen funktioniert. Damit dies funktioniert, sollte toString() auf das Ergebnis einer Variablen hinzugefügt werden definiert mit def:

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