diff --git a/libraries/stdlib/common/src/kotlin/TextH.kt b/libraries/stdlib/common/src/kotlin/TextH.kt index a885e54d8a3..a4e74e5660c 100644 --- a/libraries/stdlib/common/src/kotlin/TextH.kt +++ b/libraries/stdlib/common/src/kotlin/TextH.kt @@ -187,6 +187,16 @@ expect fun CharSequence.regionMatches( ): Boolean +/** + * A Comparator that orders strings ignoring character case. + * + * Note that this Comparator does not take locale into account, + * and will result in an unsatisfactory ordering for certain locales. + */ +@SinceKotlin("1.2") +public expect val String.Companion.CASE_INSENSITIVE_ORDER: Comparator + + /** * Returns `true` if the contents of this string is equal to the word "true", ignoring case, and `false` otherwise. */ diff --git a/libraries/stdlib/js/src/kotlin/string.kt b/libraries/stdlib/js/src/kotlin/string.kt index 32036697228..c564874cc04 100644 --- a/libraries/stdlib/js/src/kotlin/string.kt +++ b/libraries/stdlib/js/src/kotlin/string.kt @@ -105,4 +105,11 @@ public actual fun String.compareTo(other: String, ignoreCase: Boolean = false): } else { return compareTo(other) } -} \ No newline at end of file +} + + +private val STRING_CASE_INSENSITIVE_ORDER = Comparator { a, b -> a.compareTo(b, ignoreCase = true) } + +@SinceKotlin("1.2") +public actual val String.Companion.CASE_INSENSITIVE_ORDER: Comparator + get() = STRING_CASE_INSENSITIVE_ORDER diff --git a/libraries/stdlib/jvm/src/kotlin/text/StringsJVM.kt b/libraries/stdlib/jvm/src/kotlin/text/StringsJVM.kt index 561371be034..d6166d4a637 100644 --- a/libraries/stdlib/jvm/src/kotlin/text/StringsJVM.kt +++ b/libraries/stdlib/jvm/src/kotlin/text/StringsJVM.kt @@ -466,5 +466,5 @@ public actual fun CharSequence.repeat(n: Int): String { * Note that this Comparator does not take locale into account, * and will result in an unsatisfactory ordering for certain locales. */ -public val String.Companion.CASE_INSENSITIVE_ORDER: Comparator +public actual val String.Companion.CASE_INSENSITIVE_ORDER: Comparator get() = java.lang.String.CASE_INSENSITIVE_ORDER diff --git a/libraries/stdlib/jvm/test/text/StringJVMTest.kt b/libraries/stdlib/jvm/test/text/StringJVMTest.kt index d492ef7cb33..888d890be7f 100644 --- a/libraries/stdlib/jvm/test/text/StringJVMTest.kt +++ b/libraries/stdlib/jvm/test/text/StringJVMTest.kt @@ -61,11 +61,6 @@ class StringJVMTest { assertArrayNotSameButEquals(charArrayOf('\u0000', '\u0000', 'e', 'l'), buffer) } - @Test fun orderIgnoringCase() { - val list = listOf("Beast", "Ast", "asterisk") - assertEquals(listOf("Ast", "Beast", "asterisk"), list.sorted()) - assertEquals(listOf("Ast", "asterisk", "Beast"), list.sortedWith(String.CASE_INSENSITIVE_ORDER)) - } @Test fun charsets() { assertEquals("UTF-32", Charsets.UTF_32.name()) diff --git a/libraries/stdlib/test/text/StringTest.kt b/libraries/stdlib/test/text/StringTest.kt index 679b309f777..3b98bb40287 100644 --- a/libraries/stdlib/test/text/StringTest.kt +++ b/libraries/stdlib/test/text/StringTest.kt @@ -804,6 +804,12 @@ class StringTest { } + @Test fun orderIgnoringCase() { + val list = listOf("Beast", "Ast", "asterisk", "[]") + assertEquals(listOf("Ast", "Beast", "[]", "asterisk"), list.sorted()) + assertEquals(listOf("[]", "Ast", "asterisk", "Beast"), list.sortedWith(String.CASE_INSENSITIVE_ORDER)) + } + @Test fun replace() { val input = "abbAb" assertEquals("abb${'$'}b", input.replace('A', '$'))