替换字符串中所有出现的子字符串 – 这在Java中更有效率?

前端之家收集整理的这篇文章主要介绍了替换字符串中所有出现的子字符串 – 这在Java中更有效率?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道在字符串中替换所有出现的子字符串的两种方法.

正则表达式(假设“子字符替换”不包括正则表达式特殊字符):

String regex = "substring-to-be-replaced" + "+";
Pattern scriptPattern = Pattern.compile(regex);
Matcher matcher = scriptPattern.matcher(originalstring);
newstring = matcher.replaceAll("replacement-substring");

String.replace()方式:

newstring = originalstring.replace("substring-to-be-replaced","replacement-substring");

两个中哪一个更有效率(为什么)?

有比上述两种更有效的方法吗?

解决方法

String.replace()在下面使用正则表达式.
public String replace(CharSequence target,CharSequence replacement) {
      return Pattern.compile(target.toString(),Pattern.LITERAL)
             .matcher(this ).replaceAll(
               Matcher.quoteReplacement(replacement.toString()));
  }

Are there more efficient ways than the above described two?

给定的是,您可以通过数组来执行实现,而不是不可变的String类(由于string.replace在每次调用时都会创建一个新的字符串).参见例如StringBuilder.replace().

编译正则表达式导致了很多开销,这在观察Pattern source code时是很清楚的.幸运的是,Apache在StringUtils.replace()中提供了一种替代方法,根据source code(第3732行),效率非常高.

猜你在找的Java相关文章