【问题标题】:Handling InputStream in Scala在 Scala 中处理 InputStream
【发布时间】:2019-11-05 00:51:45
【问题描述】:

我有一个将 inputStream 作为参数的方法。一个 InputStream,它包含以下内容

  • 输入:

  • 包含单个数字的行:N

  • 后面是 N 行,包含两个数字 Ti 和 Li,用空格隔开。

  • 可能有一个尾随换行符。

问题是:如何在 scala 中读取和操作流?

def process(in: InputStream): Long = ???

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 能否分享一个例子,比如样本输入和样本输出

标签: scala function inputstream


【解决方案1】:

以下代码示例从第一行读取 n,然后为每一行计算 ti * li 和总和的乘积。

import java.io.InputStream
import java.io.ByteArrayInputStream
import java.nio.charset.StandardCharsets

import scala.io.Source
import scala.util.matching.Regex

  def process(in: InputStream): Long = {
    val lines = Source.fromInputStream(in).getLines()
    val n = lines.next().toInt
    val pattern: Regex = """\s*(\d+)\s+(\d+)\s*""".r
    lines.map {
      case pattern(ti, li) => ti.toInt * li.toInt
      case _ => 0
    }.sum
  }

  test("process InputStream") {
    val lines =
      raw"""3
           |1 10
           |2 200
           |3 3000
           |""".stripMargin
    println(lines)
    val is: InputStream = new ByteArrayInputStream(lines.getBytes(StandardCharsets.UTF_8))

    assert(process(is) == 9410)
  }

【讨论】:

  • 感谢您的回复,但是我如何从控制台获取输入,请帮助我,因为我是 scala 和学习新手
  • @zolo 代码在 InputStream 结束时终止。您可以根据自己的要求进行调整。
猜你喜欢
  • 2011-05-17
  • 1970-01-01
  • 2010-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-12
相关资源
最近更新 更多