【问题标题】:Scala: read user input as single stringScala:将用户输入读取为单个字符串
【发布时间】:2019-12-06 02:45:32
【问题描述】:

我需要将标准输入中的所有用户输入作为 scala 2.12 中的单个字符串(假设数据将通过单个操作复制粘贴),如下所示:

please copy data:
word1
word2
word3

我需要获取包含以下数据的字符串:

val str = "word1\nword2\nword3"

我目前的方法不起作用,只是永远挂起:

import scala.collection.JavaConverters._
val scanner: Iterator[String] = new Scanner(System.in).asScala

val sb = new StringBuilder
while (scanner.hasNext) {
  sb.append(scanner.next())
}
val str = sb.toString()

虽然这可以打印输入:

import scala.collection.JavaConverters._
val scanner: Iterator[String] = new Scanner(System.in).asScala

scanner foreach println

我正在寻找惯用的工作方式

【问题讨论】:

    标签: scala


    【解决方案1】:

    试试

    LazyList
      .continually(StdIn.readLine())
      .takeWhile(_ != null)
      .mkString("\n")
    

    灵感来自https://stackoverflow.com/a/18924749/5205022

    在我的机器上,我可以使用^D 终止输入。

    在 Scala 2.12 中,将 LazyList 替换为 Stream

    【讨论】:

    • 感谢您的回答,但这不适用于我。顺便说一句,什么是 LazyList?我使用了 Iterator.continually ,但除非我引入特殊的结束字符,否则它会永远挂起
    • 哦,我意识到这是 scala 2.13 的一个新集合,它与 Iterator 有什么不同吗?
    • @Normal 在 Scala 2.12 中,只需将 LazyList 替换为 Stream。它在什么方面不能正常工作,即你遇到什么错误?
    猜你喜欢
    • 2017-06-28
    • 1970-01-01
    • 2015-10-03
    • 2011-06-26
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    相关资源
    最近更新 更多