Merge overloads String.compareToIgnoreCase and String.compareTo with an optional parameter. Provide CASE_INSENSITIVE_ORDER comparer in String.Companion.

This commit is contained in:
Ilya Gorbunov
2015-04-16 20:55:23 +03:00
parent 64b23054a6
commit c8a76f6344
2 changed files with 27 additions and 2 deletions
+20 -2
View File
@@ -1,11 +1,10 @@
package kotlin
import java.io.StringReader
import java.util.ArrayList
import java.util.Locale
import java.util.regex.MatchResult
import java.util.regex.Pattern
import java.nio.charset.Charset
import java.util.*
import kotlin.text.Regex
@@ -270,8 +269,19 @@ public fun String.codePointCount(beginIndex: Int, endIndex: Int): Int = (this as
/**
* Compares two strings lexicographically, ignoring case differences.
*/
deprecated("Use compareTo with true passed to ignoreCase parameter.")
public fun String.compareToIgnoreCase(str: String): Int = (this as java.lang.String).compareToIgnoreCase(str)
/**
* Compares two strings lexicographically, optionally ignoring case differences.
*/
public fun String.compareTo(other: String, ignoreCase: Boolean = false): Int {
if (ignoreCase)
return (this as java.lang.String).compareToIgnoreCase(other)
else
return (this as java.lang.String).compareTo(other)
}
/**
* Returns a new string obtained by concatenating this string and the specified string.
*/
@@ -528,3 +538,11 @@ public fun String.replaceAll(regexp: String, body: (java.util.regex.MatchResult)
return sb.toString()
}
/**
* 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.
*/
public val String.Companion.CASE_INSENSITIVE_ORDER: Comparator<String>
get() = java.lang.String.CASE_INSENSITIVE_ORDER
@@ -351,4 +351,11 @@ class StringJVMTest {
builder.slice(listOf(10))
}
}
test fun orderIgnoringCase() {
val list = listOf("Beast", "Ast", "asterisk")
assertEquals(listOf("Ast", "Beast", "asterisk"), list.sort())
assertEquals(listOf("Ast", "asterisk", "Beast"), list.sortBy(String.CASE_INSENSITIVE_ORDER))
}
}