web-dev-qa-db-ja.com

groovy:All ')'を ''に置き換える方法

私はこれを試しました:

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('\)',' ')
27
john

Javaと同じ:

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

バックスラッシュをエスケープする必要があります(別のバックスラッシュを使用)。

よりGroovyの方法:def str2 = str1.replaceAll(/\)/,' ')

25
John Stoneham

replaceAll内の\をエスケープする必要があります

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

この特定の例では、他の答えは正しいです。ただし、実際には、たとえばJsonSlurperまたは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)
_

たとえば、resultの_'('_などの文字を_' '_に置き換えたい場合は、上記のExceptionを返します。

_def subResult = result.replaceAll('\\(',' ')
_

これは、JavaからのreplaceAllメソッドがstring型に対してのみ機能するためです。これが機能するには、toString()defを使用して定義された変数の結果に追加される:

_def subResult = result.toString().replaceAll('\\[',' ')
_
0
Ali Nem