我需要在main中创建一个方法来读取字符串表达式并首先用括号解析它。
表达式是:
(3+4)*7/2
必须在java中完成。但我不知道该怎么做。
有关于此的任何想法!
答案 0 :(得分:2)
试试这个:
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");
String foo = "(3+4)*7/2";
double result=0;
try {
/*
It seems that (on some platforms) this results in a java.lang.RuntimeException
because of converting Object to double, so let's replace it with
Double.doubleValue()
*/
//result = (double) (engine.eval(foo));
result = ((Double) (engine.eval(foo))).doubleValue(); //result = 24.5
} catch (ScriptException e) {
//handle exception here
}
<强>更新强>
在您尝试评估表达式之前,您应该测试是否在您的系统上注册了“JavaScript”ScriptEngine,您可以这样做:
ScriptEngineManager manager = new ScriptEngineManager();
List<ScriptEngineFactory> factories = manager.getEngineFactories();
for (ScriptEngineFactory factory : factories) {
System.out.println(factory.getNames());
}
我的输出是
[js, rhino, JavaScript, javascript, ECMAScript, ecmascript]
如果您的输出不包含JavaScript
,请尝试使用js
和javascript
,例如
ScriptEngine engine = mgr.getEngineByName("js");
或
ScriptEngine engine = mgr.getEngineByName("javascript");
如果它们都不存在,则不能使用js作为脚本引擎来评估表达式