kotlin - 在 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 循环?
解决方案
generateSequence
如果内部生成器返回 null 并且只接受一次迭代,它将完成的 nice 属性,因此以下代码可能是有效的:
val input = generateSequence(::readLine)
val lines = input.toList()
然后就像s1m0nw1 的回答一样,您可以使用任何可用的Sequence<String>
方法来根据您的解决方案的需要来改进它。
推荐阅读
- typescript - 用于具有属性的函数顶级导出的无类型模块
- python-3.x - Python函数在for循环中不要求用户输入()
- javascript - 无法在 javascript 中验证用户输入
- antlr - 计算器语法中的优先顺序
- java - 如何将 2 行文本添加到 listView?
- c# - 清除项目时 WPF/MVVM TreeView 滚动条不会重置
- variables - 配置中的剧本变量
- javascript - 使用父键创建地图并从对象中过滤数据将其推送到地图 - Javascript
- elasticsearch - 标点符号不正确的结果 - ElasticSearch
- r - 在 ggplot 中为多个绘图添加带有线/箭头的公共轴标题