如何从 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)。
最后在第二行我们将结果打印到标准输出。
我知道可以使用 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)。
最后在第二行我们将结果打印到标准输出。