Restore using Pattern in String.replace but with Unicode case folding KT-43745
diff --git a/libraries/stdlib/jvm/src/kotlin/text/StringsJVM.kt b/libraries/stdlib/jvm/src/kotlin/text/StringsJVM.kt index 3245ad2..fd43415 100644 --- a/libraries/stdlib/jvm/src/kotlin/text/StringsJVM.kt +++ b/libraries/stdlib/jvm/src/kotlin/text/StringsJVM.kt
@@ -77,7 +77,17 @@ */ @Suppress("ACTUAL_FUNCTION_WITH_DEFAULT_ARGUMENTS") public actual fun String.replace(oldValue: String, newValue: String, ignoreCase: Boolean = false): String { - run { + if (ignoreCase) { + val matcher = Pattern.compile(oldValue, Pattern.LITERAL or Pattern.CASE_INSENSITIVE or Pattern.UNICODE_CASE).matcher(this) + if (!matcher.find()) return this + val stringBuilder = StringBuilder() + var i = 0 + do { + stringBuilder.append(this, i, matcher.start()).append(newValue) + i = matcher.end() + } while (matcher.find()) + return stringBuilder.append(this, i, length).toString() + } else { var occurrenceIndex: Int = indexOf(oldValue, 0, ignoreCase) // FAST PATH: no match if (occurrenceIndex < 0) return this