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

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

public String evaluateString(String s){ Pattern p = Pattern.compile("someregex"); Matcher m = p.matcher(s); while(m.find()){ m.replaceCurrent(methodFoo(m.group())); } } 

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

看来你正在寻找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();