如果你要处理的字符串很长,或者你要处理许多字符串,那么使用java.util.regex.Matcher可能是值得的(这需要花很长时间进行编译,因此效率不高) (如果你的输入很小或搜索模式经常更改)。
以下是一个完整的示例,基于从地图中获取的令牌列表。(使用来自Apache Commons Lang的StringUtils)。
Map<String,String> tokens = new HashMap<String,String>();tokens.put("cat", "Garfield");tokens.put("beverage", "coffee");String template = "%cat% really needs some %beverage%.";// Create pattern of the format "%(cat|beverage)%"String patternString = "%(" + StringUtils.join(tokens.keySet(), "|") + ")%";Pattern pattern = Pattern.compile(patternString);Matcher matcher = pattern.matcher(template);StringBuffer sb = new StringBuffer();while(matcher.find()) { matcher.appendReplacement(sb, tokens.get(matcher.group(1)));}matcher.appendTail(sb);System.out.println(sb.toString());编译正则表达式后,通常会很快扫描输入字符串(尽管如果你的正则表达式很复杂或涉及回溯,那么你仍然需要进行基准测试以确认这一点!)



