如何解决计算以字符串形式给出的数学表达式
我将类 Data
的列表设为 dataList
,Data
包含两个变量 a
和 b
。
public class Data {
int a,b;
public Data(int a,int b){
this.a=a;
this.b=b;
}
//also contains getter and setter method
}
List<Data> dataList=new ArrayList<>();
dataList.add(new Data(2,3));
dataList.add(new Data(6,2));
另外,我有字符串形式的数学表达式,例如。 3*a+5*b;
我想将上面的表达式应用到数据列表中,得到 21 和 28 的输出。
dataList.forEach(v1 ->System.out.println(//some code to evaluate the expression));
提前致谢
解决方法
您可以使用 ScriptEngineManager
。使用 scriptEngine.eval(expression)
将执行 expression
脚本。
然后你可以这样做:
List<Data> dataList = new ArrayList<>();
dataList.add(new Data(2,3));
dataList.add(new Data(6,2));
ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("JavaScript");
dataList.forEach(data -> {
try {
System.out.println(scriptEngine.eval(data.getExpression("3*a+5*b")));
} catch (ScriptException e) {
e.printStackTrace();
}
});
使用 Data
类:
public class Data {
int a,b;
public Data(int a,int b) {
this.a = a;
this.b = b;
}
public String getExpression(String expression) {
return expression.replaceAll("a","" + a).replaceAll("b","" + b);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。