Java 将模式匹配的每个匹配项替换为该字符串上调用的方法

Java 将模式匹配的每个匹配项替换为该字符串上调用的方法,java,regex,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())); } } 问题是目前没有替代方法。也许我忽略了一个等价物。基本上,我想用对该匹配调用的方法的返回值替

我正在尝试这样做:

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

    while(m.find()){
        m.replaceCurrent(methodFoo(m.group()));
    }
}
问题是目前没有替代方法。也许我忽略了一个等价物。基本上,我想用对该匹配调用的方法的返回值替换每个匹配。任何提示都将不胜感激

更新: 由于Java 9我们可以使用


在Java 9之前

您可以使用和

appendReplacement
将做两件事:

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

    Pattern p = Pattern.compile("yourRegex");
    Matcher m = p.matcher(yourString);
    
    StringBuffer sb = new StringBuffer();
    while (m.find()) {
        m.appendReplacement(sb, yourMethod(m.group()));
    }
    m.appendTail(sb);
    
    String result = sb.toString();
    
    Pattern p = Pattern.compile("yourRegex");
    Matcher m = p.matcher(yourString);
    
    StringBuffer sb = new StringBuffer();
    while (m.find()) {
        m.appendReplacement(sb, yourMethod(m.group()));
    }
    m.appendTail(sb);
    
    String result = sb.toString();