在Java String中的算术表达式中添加多个操作数

时间:2013-05-23 17:31:59

标签: java arrays if-statement for-loop

到目前为止,我有这个代码将两个不同的字符串操作数解析成double并将它们加在一起

如何修改它以便它可以添加任意数量的字符串操作数?

double addMultipleDigits(String exp)
    {
        ArrayList<Double> wholeExpression  = new ArrayList<Double>();
        double answer = 0;
        for(int i=0;i<exp.length();i++)
        {
          if(exp.charAt(i)=='+')
          {
            answer=Integer.parseInt(exp.substring(i-1, i)) + Integer.parseInt(exp.substring(i+1, i+2));
            wholeExpression.add(answer);
            System.out.println(wholeExpression.get(0));

          }         
        }
        return answer;
    }

5 个答案:

答案 0 :(得分:8)

更改签名以添加varargs。

double addMultipleDigits(String... exp)

它可以在方法体中作为String数组处理。

答案 1 :(得分:6)

看起来你想要varargs

double addMultipleDigits(String... expressions)

此处的expressions参数只是一个常规数组,因此您仍然可以使用.length等。

然后你可以用数组显式调用它,或者只用几个参数调用它:

addMultipleDigits("123", "456");

答案 2 :(得分:2)

如果没有正确的理论基础(我从未想过我会这么说),解析和评估表达式是不可能做到的。您需要了解词法分析器和解析器,以及它们的工作原理。从输入中生成解析树后,您可以对其进行评估,或者对其进行内联评估。

答案 3 :(得分:1)

所有答案都说正确的信息使用可变数量的争论。但根据您的评论,您似乎希望将参数放在单个字符串中,例如1 + 5 + 10。

最好使用varargs,但必须使用单个字符串,然后才能使用StringTokenizer。例如

     StringTokenizer st = new StringTokenizer("1+2+3","+");
     while (st.hasMoreTokens()) {
         String s = st.nextToken(); // s is the separated string.
     }

答案 4 :(得分:0)

您可以在varargs找到更多信息。

 void foo(String... args) 
 {
    for (String s : args) 
    {
        System.out.print(s);
    }
 }