在这个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
}
}
答案 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