在Scala中,如何在“END”字符串到达之前继续阅读stdin
这是我尝试过的:
val text = Iterator.continually(Console.readLine).takeWhile(_ != "END").toString
答案 0 :(得分:5)
您应该使用mkString
代替toString
:
val text = Iterator.
continually(Console.readLine).
takeWhile(_ != "END").
mkString("\n")
集合上的 mkString
使用可选的分隔符聚合字符串中的所有元素。
答案 1 :(得分:1)
您可以使用这样的简单递归函数:
def r(s: String = ""): String = {
val l = readLine
if (l == "END") s
else r(s + l)
}
你可以称之为r("")
它返回结果字符串
答案 2 :(得分:0)
我猜你想要这样的东西:
var buffer = ""
Iterator.continually(Console.readLine).takeWhile(_ != "END").foreach(buffer += _)
val text = buffer
答案 3 :(得分:0)
Conole.readLine
已过时。请改用io.StdIn.readLine
。这里是带有您的代码片段的完整程序。我所做的唯一更改是它将读取整个输入,直到用户按下Ctrl-D或遇到EOF:
import io.StdIn.readLine
object Reader extends App {
val x = Iterator
.continually(readLine)
.takeWhile(_ != null)
.mkString("\n")
println(s"STDIN was: $x")
}