31

我试过这个:

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

但我收到以下错误:

异常 org.codehaus.groovy.control.MultipleCompilationErrorsException:启动失败,Script11.groovy:3:意外字符:'\'@ 第 3 行,第 29 列。 org.codehaus.groovy.control.ErrorCollector(failIfErrors:296)出现 1 错误

所以问题是我该怎么做:

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

4 回答 4

41

与 Java 相同:

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

您必须转义反斜杠(使用另一个反斜杠)。

于 2010-04-11T13:38:33.670 回答
26

一种更 Groovy 的方式:def str2 = str1.replaceAll(/\)/,' ')

于 2010-04-11T15:26:01.563 回答
5

你必须逃离\内部replaceAll

def str2 = str1.replaceAll('\\)',' ')
于 2010-04-11T13:38:39.660 回答
2

对于此特定示例,其他答案是正确的;但是,在实际情况下,例如使用JsonSlurperor解析结果XmlSlurper然后替换其中的字符时,会发生以下异常:

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

考虑以下示例,

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

如果想用例如替换诸如'('in之类的字符,则以下返回上述内容:result' 'Exception

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

这是因为replaceAllJava 中的方法仅适用于string类型。为此,toString()应将其添加到使用定义的变量的结果中def

def subResult = result.toString().replaceAll('\\[',' ')
于 2017-02-26T09:39:27.130 回答