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

标签 java string replace

我需要以最有效的方式替换字符串中的许多不同的子字符串。 除了使用 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/

相关文章:

r - 如何在 R 中用 NA 替换缺失的空格?

Python-替换字典中键、值中的特殊字符

java - 在 Spring Boot 中将 Apache Mahout 与 ElasticSearch 集成

java - 如何使用 replaceFirst 替换 {....}

java - 用java读取灰度图像

java - 从字符串中删除最后一个字符

string - 在 clojure 中应用 str 时保留空格

php - 最后一个斜杠之后的文本,我的错误是什么?

java - 如何从外部包资源导入 CSS 文件

android - 如何将 url 放在 string.xml 中?