评估字符串中给出的数学表达式

时间:2015-02-13 12:50:05

标签: java string math expression evaluation

这是我的代码:

String test = "12+23-42-53+4-31";
        int counter = 0;
        Stack<Integer> numb= new Stack<Integer>();
        Stack<String> op = new Stack<String>();
        for(int i = 0; i<test.length();i++){
            if(test.charAt(i)=='-' || test.charAt(i)=='+'){
                int number = Integer.parseInt(test.substring(counter, i));
                counter=i+1;
                numb.push(number);
                String oper = Character.toString(test.charAt(i));
                op.push(oper);
            }

        }

如果我循环通过麻木堆栈,则缺少最后一个测试字符串数。有没有解决方案?

3 个答案:

答案 0 :(得分:1)

退出for循环时,不添加最后一个数字,因为测试字符串末尾没有“ - ”或“+”符号。

退出for循环后,只需将最后一个数字推入麻木堆栈。

提示:counter是最后一个数字开始的位置,最后一个位置是字符串长度。

如果你这样做并打印堆栈:

//Print the stacks to see result
System.out.println(numb.toString());
System.out.println(op.toString());

您将获得以下输出:

[12, 23, 42, 53, 4, 31]
[+, -, -, +, -]

答案 1 :(得分:0)

if语句中,您可以测试字符是'-'还是'+'。然后,您解析之前的数字。所以你应该在for - 循环结束后解析最后一个数字。

答案 2 :(得分:0)

ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
Object o = engine.eval("12+23-42-53+4-31");
System.out.println(o);