在Java中执行大量字符串替换的最快方法

2022-09-04 07:16:26

我必须编写某种解析器来获取字符串并用其他字符集替换某些字符集。代码如下所示:

noHTMLString = noHTMLString.replaceAll("</p>", "\n");
noHTMLString = noHTMLString.replaceAll("<br/>", "\n\n");
noHTMLString = noHTMLString.replaceAll("<br />", "\n\n");
//here goes A LOT of lines like these ones

该函数很长,执行大量字符串替换。这里的问题是,它需要花费大量时间,因为它被调用了很多次,从而降低了应用程序的性能。

我在这里阅读了一些关于使用StringBuilder作为替代方案的线程,但它缺少ReplaceAll方法,并且正如这里所指出的,string.replaceAll()性能是否受到字符串不可变性的影响? replaceAll方法适用于

Match Pattern & Matcher 和 Matcher.replaceAll() 使用 StringBuilder 来存储最终返回的值,所以我不知道切换到 StringBuilder 是否真的会减少执行替换的时间。

您知道以快速方式进行大量字符串替换的快速方法吗?你对这个问题有什么建议吗?

谢谢。

编辑:我必须创建一个报告,其中包含一些带有html文本的字段。对于每一行,我调用替换这些字符串中的所有html标记和特殊字符的方法。使用完整报告时,解析所有文本需要 3 分钟以上。问题是我必须经常调用该方法


答案 1

我发现org.apache.commons.lang.StringUtils是最快的,如果你不想打扰StringBuffer。

你可以这样使用它:
noHTMLString = StringUtils.replace(noHTMLString, "</p>", "\n");

我做了性能测试,它比我的自定义StringBuffer解决方案更糟糕,类似于@extraneon提出的解决方案。


答案 2

它看起来像你在那里解析HTML,你有没有想过使用第三方库而不是重新发明轮子?