Я работаю с устаревшим кодом, у которого есть статический вызов метода, который нам нужно удалить из нашего дерева исходных текстов.
Существующий код выглядит следующим образом:
Logger.getInstance(JdkUtil.forceInit(SomeBusiness.class));
То, что нам нужно, это:
Logger.getInstance(SomeBusiness.class);
Я провел весь день сегодня, пытаясь понять, как сделать эту замену. Поскольку у меня очень мало опыта работы с регулярными выражениями, я смог придумать только шаблон, соответствующий исходной строке.
Шаблон JdkUtil.forceInit ([a-zA-Z_0-9] *. Class) находит совпадения во входной строке, которую я предоставляю. Я проверял это в https://www.freeformatter.com/java-regex-tester.html
Так что если кто-то может опубликовать Java-решение для этого, я был бы очень признателен.
Ниже приведен некоторый Groovy-код, который у меня есть. Чего мне не хватает, так это того, как правильно замена объясняется выше.
String source = 'Logger.getInstance(JdkUtil.forceInit(RtpRuleEngineCompiledImpl.class))'
String regexpPattern = 'JdkUtil.forceInit\\([a-zA-Z_0-9\\)]*.class\\)'
String replaced = source.replaceFirst(regexpPattern, 'hello')
println replaced
Когда я запускаю приведенный выше код, я получаю следующий вывод:
Logger.getInstance (привет) * * одна тысяча двадцать-одна
Очевидно, что "привет" только для тестирования.
Заранее спасибо всем, кто может дать мне несколько советов.