首页 > 解决方案 > 在 Kotlin 中读取所有输入行的简洁方式

问题描述

进行编码挑战时的一个常见模式是读取多行输入。假设您事先不知道有多少行,您想读取直到 EOF(readLine 返回 null)。

另外作为前言,我不想依赖 java.utils.*,因为我在 KotlinNative 中编码,所以没有 Scanner。

我想做一些类似的事情

val lines = arrayListOf<String>()
for (var line = readLine(); line != null; line = readLine()) {
    lines.add(line)
}

但这显然不是有效的 Kotlin。我能想到的最干净的是:

while (true) {
    val line = readLine()
    if (line == null) break
    lines.add(line)
}

这行得通,但它似乎不是很地道。有没有更好的方法将所有行读入数组,而不使用 while/break 循环?

标签: kotlinkotlin-native

解决方案


generateSequence如果内部生成器返回 null 并且只接受一次迭代,它将完成的 nice 属性,因此以下代码可能是有效的:

val input = generateSequence(::readLine)
val lines = input.toList()

然后就像s1m0nw1 的回答一样,您可以使用任何可用的Sequence<String>方法来根据您的解决方案的需要来改进它。


推荐阅读