From ce4eff321cd976df4ba26fe3971642259af891d2 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Tue, 11 Apr 2017 11:40:50 +0200 Subject: [PATCH] Optimize StringUtils.replace for larger replacement pattern Issue: SPR-15430 --- .../main/java/org/springframework/util/StringUtils.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/spring-core/src/main/java/org/springframework/util/StringUtils.java b/spring-core/src/main/java/org/springframework/util/StringUtils.java index e7132384983..7de1430c5d9 100644 --- a/spring-core/src/main/java/org/springframework/util/StringUtils.java +++ b/spring-core/src/main/java/org/springframework/util/StringUtils.java @@ -414,7 +414,12 @@ public abstract class StringUtils { return inString; } - StringBuilder sb = new StringBuilder(inString.length()); + int capacity = inString.length(); + if (newPattern.length() > oldPattern.length()) { + capacity += 16; + } + StringBuilder sb = new StringBuilder(capacity); + int pos = 0; // our position in the old string int patLen = oldPattern.length(); while (index >= 0) { @@ -423,6 +428,7 @@ public abstract class StringUtils { pos = index + patLen; index = inString.indexOf(oldPattern, pos); } + // append any characters to the right of a match sb.append(inString.substring(pos)); return sb.toString();