Подтвердить что ты не робот

Groovy: как заменитьAll ')' на ''

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

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

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

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

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

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

Ответ 1

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

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

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

Ответ 2

Более Groovy способ: def str2 = str1.replaceAll(/\)/,' ')

Ответ 3

Вам нужно избежать \ внутри replaceAll

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

Ответ 4

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