groovy: как заменить все ')' на '' - PullRequest
25 голосов
/ 11 апреля 2010

Я пробовал это:

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

но я получил следующую ошибку:

Исключение org.codehaus.groovy.control.MultipleCompilationErrorsException: запуск не выполнен, Script11.groovy: 3: неожиданный символ: '\' @ строка 3, столбец 29. 1 ошибка в org.codehaus.groovy.control.ErrorCollector (failIfErrors : 296)

поэтому вопрос в том, как мне это сделать:

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

Ответы [ 4 ]

34 голосов
/ 11 апреля 2010

То же, что и в Java:

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

Вы должны избежать обратной косой черты (с другой обратной косой чертой).

25 голосов
/ 11 апреля 2010

Еще более заводной способ: def str2 = str1.replaceAll(/\)/,' ')

4 голосов
/ 11 апреля 2010

Вы должны сбежать \ внутри replaceAll

def str2 = str1.replaceAll('\\)',' ')
0 голосов
/ 26 февраля 2017

Другие ответы верны для этого конкретного примера; однако в реальных случаях, например при разборе результата с использованием 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('\\(',' ')

Это связано с тем, что метод replaceAll из Java работает только для типов string. Чтобы это работало, toString() должен быть добавлен к результату переменной, определенной с помощью def:

def subResult = result.toString().replaceAll('\\[',' ')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...