【问题标题】:Evaluating a math expression given in string评估字符串中给出的数学表达式
【发布时间】:2015-02-13 12:50:04
【问题描述】:

这是我的代码:

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);
            }

        }

如果我循环遍历 numb 堆栈,则缺少最后一个测试字符串。有什么解决办法吗?

【问题讨论】:

标签: java string math expression evaluation


【解决方案1】:

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

退出 for 循环后,只需将最后一个数字压入 numb 堆栈即可。

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

如果你做得正确并打印堆栈:

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

您将获得以下输出:

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

【讨论】:

    【解决方案2】:

    在您的if 语句中,您测试该字符是'-' 还是'+'。然后,您解析前面的数字。因此,您应该在 for-loop 完成后解析最后一个数字。

    【讨论】:

      【解决方案3】:
      ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
      Object o = engine.eval("12+23-42-53+4-31");
      System.out.println(o);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-29
        • 1970-01-01
        • 2010-12-17
        • 1970-01-01
        • 2022-01-17
        相关资源
        最近更新 更多