Отсутствует экранируемый символ с String.ReplaceAlli в gradle

У меня есть следующие операторы в задаче файла gradle, но при ее выполнении появляется ошибка «Персонаж, который нужно экранировать, отсутствует».

String contents = new File( 'settings/tomcat-config/catalina.bat' ).getText()
contents = contents.replaceAll('-Dappspace.home=[^\"]*','test');

Кажется тривиальным, но не удалось разобраться в проблеме.

Отсутствует экранируемый символ с String.ReplaceAlli в gradle

Я думаю, вам нужно избежать обратной косой черты -Dappspace.home=[^\\"]*

Jens 23.05.2018 09:31

Не сработало. Та же ошибка.

manojadams 23.05.2018 09:34

Вы хотите записать его обратно в файл? Или вы используете контент где-то еще? И вам не нужно убегать от ", здесь попробуйте contents.replaceAll(/-Dappspace.home=[^"]*/,'test')

Leonard Brünings 23.05.2018 09:45
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
581
1

Ответы 1

Предположим, ваш файл catalina.bat содержит строку следующего содержания:

set APP_HOME=-Dappspace.home = "%CATALINA_BASE%\somedir"

тогда вы захотите включить в матч ". Другими словами, бег:

def contents = new File('catalina.bat').text
println contents.replaceAll('-Dappspace.home = "([^"]+)"','test')

напечатает:

set APP_HOME=test

во время бега:

def contents = new File('catalina.bat').text
println contents.replaceAll(/(-Dappspace.home = ")([^"]+)/, '$1test')    

напечатает:

set APP_HOME=-Dappspace.home = "test"

что, как я подозреваю, ближе к тому, что вы хотите. Если вы хотите заменить содержимое файла, вы можете просто сделать:

def file = new File(...)
file.text = file.text.replaceAll(...)

также, поскольку это находится в файле gradle, вы можете использовать метод gradle dsl project.file и заменить new File(...) только на file(...) в своем коде, который дает нам окончательную версию (при условии, что вы смотрите на замену строки в содержимом файла):

def f = file('catalina.bat')
f.text = f.text.replaceAll(/(-Dappspace.home = ")([^"]+)/, '$1test')    

Другие вопросы по теме