2010-04-11 33 views
21

嘗試這樣做:常規:我如何的replaceAll ')' 與'

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

,但我得到了以下錯誤:

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)

所以,問題是我怎麼做到這一點:

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

回答

26

相同的Java:

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

你必須避開反斜線(用另一個反斜槓)。

4

你必須逃離replaceAll

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

更Groovy的方式裏面的\def str2 = str1.replaceAll(/\)/,' ')

0

其他的答案是這個特定的例子正確的;然而,在實際情況下,例如解析使用JsonSlurperXmlSlurper結果時,然後在它替換的字符,以下例外情況:

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

考慮下面的例子,

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

如果一個想要用' '來代替result中的'('這樣的字符,例如,以下返回上述Exception

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

這是由於來自Java的replaceAll方法僅適用於string類型的事實。爲此,應將toString()添加到使用def定義的變量的結果中:

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