如何在 kotlin 中读取 stdin 中的所有行?

Art*_*ira 4 stdin kotlin

我知道可以使用 while 循环使用 readLine 函数从 stdin 获取多行输入。

kotlin 中是否有一个函数可以在不使用 JVM api 的情况下从 stdin 一次检索所有行?

Art*_*ira 8

val input = generateSequence(::readLine).joinToString("\n")
print(input)
Run Code Online (Sandbox Code Playgroud)

第一行从 stdin 获取多行输入并将其放入变量中。

generateSequence是 kotlin 标准库包中的一个函数kotlin.sequences,它接受另一个函数并调用它,直到它返回 null。最后它将返回一个 Sequence 实例,这是一个可以迭代的元素序列。

::readLine部分是一种将函数传递给函数的方法readLine,用于从 stdin 读取generateSequence数据。只调用readLine()without::会导致编译器错误,因为generateSequence需要 lambda,而不是字符串。

joinToString 方法属于 Sequence 类。它将迭代其元素并使用给定的分隔符连接它们,在本例中,分隔符是一个新行 (\n)。

最后,在第二行,我们将结果打印到标准输出。