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