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

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

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

person john    schedule 11.04.2010    source источник


Ответы (4)


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

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

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

person Tomislav Nakic-Alfirevic    schedule 11.04.2010

Более отличный способ: def str2 = str1.replaceAll(/\)/,' ')

person John Stoneham    schedule 11.04.2010

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

def str2 = str1.replaceAll('\\)',' ')
person ccheneson    schedule 11.04.2010

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