我知道在字符串中替换所有出现的子字符串的两种方法.
正则表达式(假设“子字符替换”不包括正则表达式特殊字符):
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行),效率非常高.