我需要以最有效的方式替换字符串中的许多不同的子字符串。 除了使用 string.replace 替换每个字段的强力方法之外,还有其他方法吗?
最佳答案
如果您正在操作的字符串非常长,或者您正在操作许多字符串,那么使用 java.util.regex.Matcher 可能是值得的(这需要预先编译时间,所以它不会'如果您的输入非常小或者您的搜索模式经常变化,那么效率就不会很高。
下面是一个完整的示例,基于从 map 中获取的标记列表。 (使用 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一次替换字符串中的多个不同子字符串(或以最有效的方式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58193422/