0Pricing
Kotlin Academy · 课时

字符范围与自定义范围

超越整数范围

字符范围与自定义范围 是 CoddyKit 上的免费 Kotlin Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Kotlin Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Kotlin Academy 课程共包含 4 节课。

超越整数

范围并不只适用于 Int。Kotlin 支持字符范围和其他可比较类型的范围。

本课将探索字符范围,以及自定义类型如何通过 rangeTo 加入其中。

回顾字符范围

字符具有确定的顺序,因此 'a'..'z' 是有效范围。

您可以对其进行迭代、检查成员关系等。

fun main() {
    for (c in 'a'..'f') print(c)
    println()
    println('q' in 'a'..'z')
}

验证字符

字符范围可以让输入验证更加清晰,例如检查输入是否为数字或字母。

fun isDigit(c: Char): Boolean = c in '0'..'9'

fun main() {
    println(isDigit('7'))
    println(isDigit('x'))
}

统计字母

您可以通过遍历字符范围并收集这些值,快速构建字母表。

fun main() {
    val alphabet = ('a'..'z').toList()
    println(alphabet.size)
    println(alphabet.first())
    println(alphabet.last())
}

长整数范围

范围同样适用于 Long,可用于表示较大的数值区间。

使用的运算符相同。

fun main() {
    val big = 1L..5L
    println(big.sum())
}

可比较类型的范围

任何 Comparable 类型都可以通过 .. 构成范围,不过这种范围只支持成员检查,不支持迭代。

例如,String 范围可以检查字典序。

fun main() {
    val range = "apple".."mango"
    println("cherry" in range)
    println("zebra" in range)
}

为什么有些范围无法迭代

迭代需要定义明确的步长。整数和字符都有步长,即加一;但字符串和双精度数没有明显的下一个值。

因此,这些范围支持 in,但不支持 for 循环。

fun main() {
    val r = 1.0..5.0
    println(2.5 in r)
    // for (x in r) // not allowed for Double
}

使用 rangeTo 的自定义类型

.. 运算符会调用 rangeTo 函数。如果您的类实现了 Comparable,就可以免费获得范围成员检查功能。

这里的简单版本类会按数值进行比较。

data class Ver(val n: Int) : Comparable<Ver> {
    override fun compareTo(other: Ver) = n - other.n
}

fun main() {
    val range = Ver(1)..Ver(5)
    println(Ver(3) in range)
    println(Ver(9) in range)
}

运算符背后的实现

编写 a..b 与调用 a.rangeTo(b) 相同。

运算符形式只是同一个函数更简洁的语法。

fun main() {
    val r1 = 1..5
    val r2 = 1.rangeTo(5)
    println(r1.toList() == r2.toList())
}

选择合适的范围

快速指南:

  • 数字和字符 → 可以迭代并检查
  • 双精度数和自定义可比较类型 → 只能检查成员关系
  • 需要步长?请使用整数或字符步进序列
fun main() {
    println('m' in 'a'..'z')
    println(3.5 in 1.0..4.0)
    println(50 in 1..100)
}

综合运用

范围可以推广到许多类型:

  • 字符范围可以迭代和验证
  • Long 范围可以处理较大的区间
  • 可比较类型和自定义类型支持成员检查
  • .. 是 rangeTo 的简写语法
fun main() {
    val vowels = "aeiou"
    for (c in 'a'..'z') {
        if (c in vowels) print(c)
    }
    println()
}

快速检查

请检验您对字符范围和自定义范围的理解。

回顾

您已经学习了字符范围和自定义范围:

  • 字符范围和 Long 范围可以像 Int 范围一样迭代
  • 可比较类型可以通过 .. 支持成员检查
  • 非离散类型支持使用 in 检查,但无法进行循环
  • .. 是 rangeTo 的简写

这就完成了“范围与步进序列”课程。

常见问题解答

「字符范围与自定义范围」课时是免费的吗?

是的 — 「字符范围与自定义范围」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Kotlin Academy 课程的其余内容,请升级到 CoddyKit PRO。 Kotlin Academy 课程共包含 4 节课。

「字符范围与自定义范围」这节课中我会学到什么?

超越整数范围 你通过在浏览器中直接运行的动手代码来练习 Kotlin Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Kotlin Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Kotlin Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「字符范围与自定义范围」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Kotlin Academy 课中编写并运行代码吗?

能。每节 Kotlin Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 范围运算符
  2. Step 与 downTo
  3. 循环中的范围
  4. 字符范围与自定义范围
← 返回 Kotlin Academy