使用该字符串调用的方法替换模式匹配的每个匹配项

Ale*_*ard 4 java regex

我正在尝试做这样的事情:

public String evaluateString(String s){
    Pattern p = Pattern.compile("someregex");
    Matcher m = p.matcher(s);

    while(m.find()){
        m.replaceCurrent(methodFoo(m.group()));
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是没有replaceCurrent方法.也许有一个我忽略的等价物.基本上我想用匹配调用的方法的返回值替换每个匹配.任何提示将不胜感激!

Psh*_*emo 7

看来你正在寻找Matcher#appendReplacementMatcher#appendTail.

appendReplacement 会做两件事:

  1. 它将添加到当前匹配和上一个匹配之间放置的选定缓冲区文本(或第一个匹配的字符串开头),
  2. 之后,它还将添加当前匹配的替换(可以基于它).

appendTail将添加到当前匹配放置的缓冲区文本.

Pattern p = Pattern.compile("someregex");
Matcher m = p.matcher(s);

StringBuffer sb = new StringBuffer();
while (m.find()) {
    m.appendReplacement(sb, methodFoo(m.group()));
}
m.appendTail(sb);

String result = sb.toString();
Run Code Online (Sandbox Code Playgroud)