【发布时间】:2019-03-19 00:04:54
【问题描述】:
我知道可以使用 while 循环使用 readLine 函数从标准输入获取多行输入。
kotlin 中是否有一个函数可以在不使用 JVM api 的情况下一次从标准输入检索所有行?
【问题讨论】:
我知道可以使用 while 循环使用 readLine 函数从标准输入获取多行输入。
kotlin 中是否有一个函数可以在不使用 JVM api 的情况下一次从标准输入检索所有行?
【问题讨论】:
val input = generateSequence(::readLine).joinToString("\n")
print(input)
第一行从stdin获取多行输入,放入变量中。
generateSequence 是 kotlin 标准库 kotlin.sequences 包中的一个函数,它接受另一个函数并调用它,直到它返回 null。最后它会返回一个Sequence的实例,也就是一个可以迭代的元素序列。
::readLine 部分是一种将用于从标准输入读取的readLine 函数传递给generateSequence 函数的方法。仅调用 readLine() 而没有 :: 将导致编译器错误,因为 generateSequence 需要一个 lambda,而不是一个字符串。
joinToString 方法属于 Sequence 类。它将遍历其元素并使用给定的分隔符将它们连接起来,在这种情况下,分隔符是一个新行 (\n)。
最后在第二行我们只是将结果打印到标准输出。
【讨论】: