【问题标题】:Continue reading stdin until "END" in Scala?继续阅读标准输入直到 Scala 中的“END”?
【发布时间】: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


【解决方案1】:

您应该在这里使用mkString 而不是toString

val text = Iterator.
    continually(Console.readLine).
    takeWhile(_ != "END").
    mkString("\n")

mkString on collection 使用可选的分隔符聚合字符串中的所有元素。

【讨论】:

    【解决方案2】:

    你可以像这样使用简单的递归函数:

    def r(s: String = ""): String = {
      val l = readLine
      if (l == "END") s
      else r(s + l)
    }
    

    你可以调用它r("")它返回结果字符串

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        我猜你想要这样的东西:

        var buffer = ""
        Iterator.continually(Console.readLine).takeWhile(_ != "END").foreach(buffer += _)
        val text = buffer
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-10-18
          • 1970-01-01
          • 1970-01-01
          • 2011-05-11
          • 2021-08-03
          • 2017-05-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多