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

set ignore case value in when expression on strings

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

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

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

问题是这样的:

在这种情况下我可以设置 ignoreCase = true 吗?

你可以在这里使用toLowerCase()函数:

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

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

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

fun main() {

    operator fun String.contains(other: String): Boolean = this.contains(other, ignoreCase = true)

    when(myString) {
        in "firstString" -> ...
    }
}

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

但是请注意,此技巧仅在原始 contains 函数是扩展时才有效。如果它是一个成员函数,它不能被扩展覆盖。