我正在进行一些文本预处理,并且我使用replaceAll()方法至少10次。我担心这会开始变得低效。
我的代码就像:
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"));
有关如何提高此代码效率的任何想法吗?
答案 0 :(得分:1)
根据您的模式,您可以通过预编译获得不错的改进。 replaceAll
必须执行Pattern.compile(patternStr).matcher(this).replaceAll(replacement)
之类的操作。它不会缓存Pattern
,因此如果只编译一次,只要代码被多次调用,您就会看到改进。
如果可以,请使用String.replace()
而不是String.replaceAll()
,但听起来有点像你需要这种模式。
答案 1 :(得分:-2)
尽量不要使用正则表达式。在java中,主要是:
如果你可以使用substring方法或indexOf方法,那就去做吧!