我有一个类似的字符串: String str="(2+(3*4))+(1+2)"; 不知何故,我想以整数格式计算它的值。即我应该能够得到2+12+3=17。对我来说重要的是最终结果。
我用过:str.replaceAll("\((.*?)\)", "$1"),它不能正常工作,甚至我也无法得到整数的答案。
谁能帮我?提前致谢 :)
调车码算法对此很有用。这是一个使用此算法的带有源代码的 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();
}
}
}
正则表达式不是一个好主意。您应该解析字符串并使用堆栈。
算法解释见这里(第三个): http ://www.smccd.net/accounts/hasson/C++2Notes/ArithmeticParsing.html