diff --git a/icu4j/main/classes/core/src/com/ibm/icu/text/Normalizer2.java b/icu4j/main/classes/core/src/com/ibm/icu/text/Normalizer2.java index 4857bfd4475..5fb5ded49ea 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/text/Normalizer2.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/text/Normalizer2.java @@ -204,7 +204,17 @@ public abstract class Normalizer2 { * @stable ICU 4.4 */ public String normalize(CharSequence src) { - return normalize(src, new StringBuilder()).toString(); + if(src instanceof String) { + // Fastpath: Do not construct a new String if the src is a String + // and is already normalized. + int spanLength=spanQuickCheckYes(src); + if(spanLength==src.length()) { + return (String)src; + } + StringBuilder sb=new StringBuilder(src.length()).append(src, 0, spanLength); + return normalizeSecondAndAppend(sb, src.subSequence(spanLength, src.length())).toString(); + } + return normalize(src, new StringBuilder(src.length())).toString(); } /**