2016-03-06 84 views
0

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

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

为什么就不能'调用println(12 + 3 + 5)'? ;) – Maroun

+0

我试图建立一个计算器,为用户输入一个字符串,程序计算结果 – ps0604

+0

case _ => str.toInt – csharpfolk

回答

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 
+0

如果我需要添加除法和乘法,该怎么办? – ps0604

+0

那么你必须使用一个真正的解析器。 –