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

时间:2013-10-28 21:20:54

标签: 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()));
    }
}

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

1 个答案:

答案 0 :(得分:7)

您似乎在寻找Matcher#appendReplacementMatcher#appendTail

appendReplacement会做两件事:

  1. 它将添加到当前匹配和上一次匹配(或首次匹配的字符串开头)之间
  2. 的选定缓冲区文本
  3. 之后,它还会为当前匹配添加替换(可以基于它)。
  4. 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();