Java中的正则表达式 - 计算整数形式的值

时间:2013-09-20 12:12:05

标签: java regex

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

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

任何人都可以帮助我吗? 在此先感谢:)

4 个答案:

答案 0 :(得分:4)

Shunting-yard algorithm对此有好处。这是使用此算法的java applet with sourcecode

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

  

Janino - 这真是太神奇了!

     

Jep Java

     

Mvel

使用内置Javascript engine

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

    }
}

答案 1 :(得分:3)

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

我认为这link可以帮到你。

++

答案 2 :(得分:0)

答案 3 :(得分:0)

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

请参阅此处了解算法的解释(第三个): http://www.smccd.net/accounts/hasson/C++2Notes/ArithmeticParsing.html