Groovy: 如何用 replaceAll 将 ')' 替换为 ' '

32

我尝试了这个:

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

但我遇到了以下错误:

异常 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('\)',' ')
5个回答

44

与Java中相同:

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

你需要转义反斜杠(使用另一个反斜杠)。


正如另一个答案所指出的,在Java和Groovy中,你都不应该使用正则表达式,而是应该使用.replace()。这种解决方法更快,而且你不需要担心转义闭合括号。 - winne2

26

更优雅的方式:

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

5

replaceAll中,你需要转义\

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

2

只需使用方法而不是正则表达式:

def str2 = str1.replace(')',' ')

1
这是正确的方式。如果不必要,为什么要创建一个正则表达式呢? - Stephen Talley

2

其他回答对于这个具体的例子是正确的;然而,在实际情况中,例如使用 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中的字符如'('替换为' ',可以使用以下代码。但是请注意,这可能会引发上述的异常

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

这是因为Java中的replaceAll方法仅适用于string类型。为了使其正常工作,需要在使用def定义的变量结果上添加toString()
def subResult = result.toString().replaceAll('\\[',' ')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接