【发布时间】:2013-12-05 08:36:07
【问题描述】:
如何在 Scala 中继续阅读 stdin 直到达到“END”字符串?
这是我尝试过的:
val text = Iterator.continually(Console.readLine).takeWhile(_ != "END").toString
【问题讨论】:
-
什么没有按预期工作?
标签: scala io iterator stdin scala-2.10
如何在 Scala 中继续阅读 stdin 直到达到“END”字符串?
这是我尝试过的:
val text = Iterator.continually(Console.readLine).takeWhile(_ != "END").toString
【问题讨论】:
标签: scala io iterator stdin scala-2.10
您应该在这里使用mkString 而不是toString:
val text = Iterator.
continually(Console.readLine).
takeWhile(_ != "END").
mkString("\n")
mkString on collection 使用可选的分隔符聚合字符串中的所有元素。
【讨论】:
你可以像这样使用简单的递归函数:
def r(s: String = ""): String = {
val l = readLine
if (l == "END") s
else r(s + l)
}
你可以调用它r("")它返回结果字符串
【讨论】:
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")
}
【讨论】:
我猜你想要这样的东西:
var buffer = ""
Iterator.continually(Console.readLine).takeWhile(_ != "END").foreach(buffer += _)
val text = buffer
【讨论】: