在Scala中递归添加数字

时间:2016-03-06 12:05:29

标签: scala

在这个Scala代码中,我试图分析包含总和的字符串(例如12+3+5)并返回结果(20)。我正在使用正则表达式提取第一个数字并解析要递归添加的跟踪。我的问题是,由于正则表达式返回一个字符串,我无法将数字加起来。有什么想法吗?

object TestRecursive extends App {

  val plus = """(\w*)\+(\w*)""".r

  println(parse("12+3+5"))

  def parse(str: String) : String = str match {

    // sum   
    case plus(head, trail) => parse(head) + parse(trail)

    case _ => str
  }


}

1 个答案:

答案 0 :(得分:2)

您可能希望将parser combinators用于此类应用程序。

"""(\w*)\+(\w*)""".r也匹配"+""23+""4 +5" // but captures it only in the first group

你可以做的可能是

scala> val numbers = "[+-]?\\d+"
numbers: String = [+-]?\d+
                                   ^

scala> numbers.r.findAllIn("1+2-3+42").map(_.toInt).reduce(_ + _)
res4: Int = 42

scala> numbers.r.findAllIn("12+3+5").map(_.toInt).reduce(_ + _)
res5: Int = 20