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