继续阅读标准输入,直到"结束"在斯卡拉?

时间:2013-12-05 08:36:07

标签: scala io iterator stdin scala-2.10

在Scala中,如何在“END”字符串到达​​之前继续阅读stdin

这是我尝试过的:

val text = Iterator.continually(Console.readLine).takeWhile(_ != "END").toString

4 个答案:

答案 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")
}