在字符串上的when表达式中设置忽略大小写值



我知道如何检查一个字符串是否在另一个字符串中就像这个代码。

when (myString) {
in "FirstString"  -> {
// some stuff
}
in "SecondString" -> {
// some stuff
}
else -> {
// some stuff
}
}

in关键字在后台调用此方法CharSequence.contains(other: CharSequence, ignoreCase: Boolean = false)

问题是:

在这种情况下,有什么方法可以设置ignoreCase = true吗?

您可以为when:之前的字符串声明一个特殊的本地运算符函数contains

fun main() {
operator fun String.contains(other: String): Boolean = this.contains(other, ignoreCase = true)
when(myString) {
in "firstString" -> ...
}
}

这样,in运算符将调用该函数,而不是标准库中声明的函数,因为它位于更近的范围内。

但是,请注意,只有当原始contains函数是扩展时,此技巧才有效。如果它是成员函数,则不能用扩展重写它。

您可以在此处使用toLowerCase((函数:

when (myString.toLowerCase()) {
in "firststring"  -> {
// some stuff
}
in "secondstring" -> {
// some stuff
}
else -> {
// some stuff
}
}

对于when的情况,如果它们是变量,则需要对它们中的每一个调用toLowerCase()。但是,如果它们是常量,那么简单地使用小写字符串就可以了——"firststring""secondstring"