解释为什么这个String比较结果为false?

时间:2018-01-13 13:42:51

标签: kotlin

有人可以解释为什么以下代码行导致错误。

如果字符串未大写,则代码返回true。不应该忽略这个案例意味着结果是一样的吗?

System.out.print(
    String("Carthorse".toCharArray().sortedArray())
   .equals(String("Orchestra".toCharArray().sortedArray()),true)
)

1 个答案:

答案 0 :(得分:7)

排序不会忽略大小写,这是你实际比较的内容:

//Caehorrst vs. Oacehrrst

请尝试以下方法:

val s1 = String("Carthorse".toLowerCase().toCharArray().sortedArray())
val s2 = String("Orchestra".toLowerCase().toCharArray().sortedArray())
println("$s1 vs. $s2, equal? ${s1==s2}")
//acehorrst vs. acehorrst, equal? true

或者稍微多一点fun

fun String.sortedCaseIgnore() = 
    String(toLowerCase().toCharArray().sortedArray())
val s1 = "Carthorse".sortedCaseIgnore()
val s2 = "Orchestra".sortedCaseIgnore()

顺便说一下,使用println()支持System.out.println(),这是它的定义(Kotlin标准库的一部分,不需要明确的导入):

public inline fun println(message: Any?) {
    System.out.println(message)
}