Matcher#replaceAll(Function<MatchResult,String> replacer)
был добавлен в Java 9 как более короткая версия
StringBuffer sb = new StrinbBuffer();
while(matcher.find()){
String replacement = /*replacement based on current match*/
matcher.appendReplacement(sb, replacement);
}
matcher.appendTail(sb);
String replacementResult = sb.toString();
Итак, как вы видите выше, шаблону нужен только способ решить, что должно быть заменой, на основе текущего соответствия, другими словами, функция, которая изменится currenMatch
-> replacement
.
Так что «старый способ» вашего кода может выглядеть так:
@Override
public String replace(String text) {
Matcher m = parentheses.matcher(text);
StringBuffer sb = new StringBuffer();
while(m.find()){
if (m.group(1) == null) {
m.appendReplacement(sb, Matcher.quoteReplacement(m.group()));
} else {
m.appendReplacement(sb, Matcher.quoteReplacement("(" + m.group(1) + ")"));
}
}
m.appendTail(sb);
return sb.toString();
}