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

How to read all lines from stdin in kotlin?

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

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

val input = generateSequence(::readLine).joinToString("\n")
print(input)

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

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

::readLine 部分是将用于从标准输入读取的 readLine 函数传递给 generateSequence 函数的一种方式。仅调用 readLine() 而不调用 :: 将导致编译器错误,因为 generateSequence 需要 lambda,而不是字符串。

joinToString 方法属于序列class。它将遍历它的元素并使用给定的分隔符连接它们,在本例中,它是一个新行 (\n)。

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