使用 in 和 when 关键字结合正则表达式,验证用户的输入,这是一个很酷的技巧。

    1. // 使用扩展函数重写 contains 操作符
    2. operator fun Regex.contains(text: CharSequence) : Boolean {
    3. return this.containsMatchIn(text)
    4. }
    5. // 结合着 in 和 when 一起使用
    6. when (input) {
    7. in Regex("[0–9]") -> println("contains a number")
    8. in Regex("[a-zA-Z]") -> println("contains a letter")
    9. }

    in 关键字其实是 contains 操作符的简写,它不是一个接口,也不是一个类型,仅仅是一个操作符,也就是说任意一个类只要重写了 contains 操作符,都可以使用 in 关键字,如果我们想要在自定义类型中检查一个值是否在列表中,只需要重写 contains() 方法即可,Collections 集合也重写了 contains 操作符。

    1. val input = "kotlin"
    2. when (input) {
    3. in listOf("java", "kotlin") -> println("found ${input}")
    4. in setOf("python", "c++") -> println("found ${input}")
    5. else -> println(" not found ${input}")
    6. }