import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
private static void test5() {
ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("nashorn");
String str = "(10+20-3)/9";
Object eval = null;
try {
eval = scriptEngine.eval(str);
} catch (ScriptException e) {
e.printStackTrace();
}
System.out.println("表达式"+ str + "运算的结果是:" + eval);
}
运行结果:
上面的测试是最近遇到一个需求,大概是这样的:有一个接口上传Excel文档,里面有数据,数据有一个row_index标识,是不重复的,有些指标是其它row_index计算而来的,比如第一行的表达式:A23+A24,意思就是row_index为23加上row_index为24的值就是该行指标的值。那表达式有了,这些需要计算的主指标需要根据子指标的值来计算,上传解析后就要做上面的操作。
目的就是把表达式里面的和行次有关的字符转为对应的row_index的值,得到一个计算公式的string字符串,然后用脚本引擎执行得到结果再赋值给主指标