字符范围与自定义范围
超越整数范围
字符范围与自定义范围 是 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 反馈 — 无需本地设置。
此课程中的所有课时
- 范围运算符
- Step 与 downTo
- 循环中的范围
- 字符范围与自定义范围