I know of two ways of replacing all occurrences of substring in a string.
The regex way (assuming \"substring-to-be-replaced\" doesn\'t include regex specia
String.replace() uses regex underneath.
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?
There are given that you operate on an implementation backed e.g., by an array, rather than the immutable String class (since string.replace
creates a new string on each invocation). See for instance StringBuilder.replace().
Compiling a regex incurs quite alot of overhead which is clear when observing the Pattern source code. Luckily, Apache offers an alternative approach in StringUtils.replace() which according to the source code (line #3732) is quite efficient.