-1

我有一个类似的字符串: String str="(2+(3*4))+(1+2)"; 不知何故,我想以整数格式计算它的值。即我应该能够得到2+12+3=17。对我来说重要的是最终结果。

我用过:str.replaceAll("\((.*?)\)", "$1"),它不能正常工作,甚至我也无法得到整数的答案。

谁能帮我?提前致谢 :)

4

4 回答 4

4

调车码算法对此很有用。这是一个使用此算法的带有源代码的 java 小程序。

对于表达式评估,您可以查看这些库 -

Janino - 这个真的太棒了!

杰普爪哇

米维尔

使用内置Javascript 引擎

import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;

public class ExpressionEvaluation {

    public static void main(String... args) {

        final ScriptEngineManager mgr = new ScriptEngineManager();
        final ScriptEngine engine = mgr.getEngineByName("JavaScript");

        String expr = "(2+(3*4))+(1+2)";

        try {
            System.out.println(engine.eval(expr)); // prints out 17
        } catch(Exception ex){
            //TODO:  handle the exception
            ex.printStackTrace();
        }

    }
}
于 2013-09-20T12:22:42.123 回答
3

也许您可以使用 Java 中的 ScripEngine 类并调用 eval() 函数来计算表达式。

我认为这个链接可以帮助你。

++

于 2013-09-20T12:17:16.820 回答
0

看看杰瓦尔

而这个问题

于 2013-09-20T12:20:22.483 回答
0

正则表达式不是一个好主意。您应该解析字符串并使用堆栈。

算法解释见这里(第三个): http ://www.smccd.net/accounts/hasson/C++2Notes/ArithmeticParsing.html

于 2013-09-20T12:26:23.770 回答