gpt4 book ai didi

java - 需要一个有效的算法来实现 String.replaceAll()

转载 作者:行者123 更新时间:2023-12-01 19:22:18 25 4
gpt4 key购买 nike

我发现 Java 中的 String.replaceAll() 具有正则表达式底层。它在短字符串中工作得很好。但如果是长字符串,我需要一个更有效的算法而不是 String.replaceAll()。有人可以给建议吗?谢谢!

最佳答案

如果您想进行增量替换,可以对 StringBuffer 使用显式的 appendReplacement/Tail 循环(不幸的是,没有 StringBuilder 重载为还没有)。

这是成语from the documentation :

 Pattern p = Pattern.compile(PATTERN);
Matcher m = p.matcher(INPUT_SOURCE);

StringBuffer sb = new StringBuffer();
while (m.find()) {
m.appendReplacement(sb, REPLACEMENT);
}
m.appendTail(sb);

System.out.println(sb.toString());

这几乎就是 replaceAll 的实现方式。

此方法的好处是,由于您可以完全控制替换迭代,因此您不必在任何给定时间将整个输出作为可能很长的字符串存储在内存中。您可以逐步构建输出,定期将 StringBuffer 内容刷新到磁盘。也就是说,使用此方法比使用 replaceAll 具有更高的内存效率

(您还可以进行当前替换语法不支持的奇特替换,例如 toUpperCase() 转换)。

请注意,需要增强 Matcher 以便能够附加到任何 Appendable 。如果获得许可,您不仅可以使用 StringBuilder,还可以直接替换为例如一个FileWriter .

相关问题

另请参阅

关于java - 需要一个有效的算法来实现 String.replaceAll(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3522355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com