Atomic Kotlin:InKeyword/Task4.kt:`val num = 0..9` 在 `string[i] in num` 中不起作用

Atomic Kotlin: InKeyword/Task4.kt: `val num = 0..9` does not work in `string[i] in num`

我是编程和通过学习课程学习 Kotlin 的初学者:Atomic Kotlin
我正在解决一个练习,但不明白为什么我的部分代码不起作用。 我可以在课程中看到答案代码,但我想知道如何解决我的问题。

问题

我制作了 val num = 0..9 并在 wholeStringChecker() 中使用它,这样 wholeStringChecker() 可以 return 对其中包含数字(0 到 9)的字符串为真。
但是,在 main() 的结果中,isValidIdentifier("name0")false 提供给 0
课程提供答案代码,我可以看懂代码,但我想了解导致我的代码结果的原因。

-用 couese

编写的练习说明

编写一个函数来检查它的字符串参数是否是一个有效的标识符。有效标识符是以字母或下划线开头且仅由字母、数字和下划线组成的非空字符串。
使用 s.isEmpty() 检查 s 是否为空字符串。

-完整代码

// InKeyword/Task4.kt
package theInKeywordExercise4

fun isValidIdentifier(s: String): Boolean {
  val atoz = 'a'..'z'
  val AtoZ = 'A'..'Z'
  val num = 0..9

  fun emptyChecker(string: String): Boolean = string.isNotEmpty()
  fun initialChecker(string: String) :Boolean = string[0] in atoz || string[0] in AtoZ || string[0] in "_"
  fun wholeStringChecker(string: String): Boolean {
    var i = 0
    var counter = 0
    while (i <= string.lastIndex) {
      if (string[i] in atoz || string[i] in AtoZ || string[i] in num || string[i] in "_")
        println("true ${string[i]}")
      else {
        println("false ${string[i]}")
        counter++
      }
      i++
    }

    println("counter is $counter")
    if (counter > 0) {
      println("wholeStringChecker false")
      return false
    } else {
      println("wholeStringChecker true")
      return true
    }
  }

  return emptyChecker(s) && initialChecker(s) && wholeStringChecker(s)
}
fun main() {
  println(isValidIdentifier("name0"))
}

-结果

true n
true a
true m
true e
false 0
counter is 1
wholeStringChecker false
false

*我预计 0 会成立,因为我在 wholeStringChecker().

中写了 if (string[i] in atoz || string[i] in AtoZ || string[i] in num || string[i] in "_")

考虑

val num = '0'..'9'

您正在查看字符串中的字符,因此您想要比较字符,而不是整数。