我有一个类似的字符串: String str =“(2+(3 * 4))+(1 + 2)”; 不知怎的,我想用Integer格式计算它的值。 即我应该能得到2 + 12 + 3 = 17。 对我来说最重要的是最终结果。
我用过:str.replaceAll(“\((。*?)\)”,“$ 1”),它无法正常工作,甚至我无法得到整数的答案。
任何人都可以帮助我吗? 在此先感谢:)
答案 0 :(得分:4)
Shunting-yard algorithm对此有好处。这是使用此算法的java applet with sourcecode。
对于表达式评估,您可以看到这些库 -
Janino - 这真是太神奇了!
使用内置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)
答案 2 :(得分:0)
答案 3 :(得分:0)
正则表达式不是一个好主意。 你应该解析字符串并使用堆栈。
请参阅此处了解算法的解释(第三个): http://www.smccd.net/accounts/hasson/C++2Notes/ArithmeticParsing.html