使用该字符串调用的方法替换模式匹配的每个匹配项
我正在尝试做这样的事情:
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#appendReplacement
和Matcher#appendTail
。
appendReplacement
将做两件事:
- 它将添加到当前匹配和上一个匹配之间放置的选定缓冲区文本(或第一个匹配的字符串开头),
- 之后,它还会为当前匹配添加替换(可以基于它)。
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();