java中主读取字符串表达式中的方法

时间:2013-04-25 10:26:30

标签: java netbeans

我需要在main中创建一个方法来读取字符串表达式并首先用括号解析它。

表达式是:
    (3+4)*7/2

必须在java中完成。但我不知道该怎么做。

有关于此的任何想法!

1 个答案:

答案 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,请尝试使用jsjavascript,例如

ScriptEngine engine = mgr.getEngineByName("js");

ScriptEngine engine = mgr.getEngineByName("javascript");

如果它们都不存在,则不能使用js作为脚本引擎来评估表达式