Java一次(或以最有效的方式)替换字符串中的多个不同子字符串

我需要以最有效的方式替换字符串中的许多不同子字符串。除了使用string.replace替换每个字段的强力方法以外,还有其他方法吗?

回答:

如果你要处理的字符串很长,或者你要处理许多字符串,那么使用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());

编译正则表达式后,通常会很快扫描输入字符串(尽管如果你的正则表达式很复杂或涉及回溯,那么你仍然需要进行基准测试以确认这一点!)

以上是 Java一次(或以最有效的方式)替换字符串中的多个不同子字符串 的全部内容, 来源链接: utcz.com/qa/429440.html

回到顶部