java - 多次使用 replaceAll() String 方法

标签 java regex string replaceall

我正在做一些文本预处理,我至少使用了 10 次 replaceAll() 方法。恐怕这开始变得低效了。

我的代码是这样的:

text = text.replaceAll(regex1, "rStr");
text = text.replaceAll(regex2, "rStr2");
.
.
.
text = text.replaceAll(regexn, "rStrn");

我以为我会使用 StringBuilder 以避免一直创建新字符串,但我没有注意到太大的区别。

StringBuilder sb = new StringBuilder();
sb.append(text.replaceAll(regex1, "rStr"));
sb.replace(0, sb.length(), sb.toString().replaceAll(regex2, "rStr2"));
.
.
.
sb.replace(0, sb.length(), sb.toString().replaceAll(regexn, "rStrn"));

有什么想法可以让这段代码更高效吗?

最佳答案

根据您的模式,您可以通过预编译它们获得不错的改进。 replaceAll 必须执行类似于 Pattern.compile(patternStr).matcher(this).replaceAll(replacement) 的操作。它不会缓存 Pattern,因此如果您只编译一次,您将看到改进,前提是代码被调用不止一次。

如果可以,请使用 String.replace() 而不是 String.replaceAll(),但这听起来有点像您需要模式。

关于java - 多次使用 replaceAll() String 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24042516/

相关文章:

java - Java 中的钩子(Hook)和抽象方法的区别

Java:一个程序出错,但另一个程序没有错误。 "Illegal start or type"

javascript - 在 Javascript 中对齐或填充这些字符串中的一些内容

c++ - 从文件到 float 的文本

java - 使用字符串值作为计算java的 float

java - 如何在 JPA 中设置来自 @EmbeddedId 的反向引用

mysql - 排除特定数字的正则表达式

正则表达式:无法匹配行尾

java - java中如何删除字符串中第一次出现字符后的内容?

swift - 如何快速将 Long Double 转换为 String