计算以字符串形式给出的数学表达式

问题描述

我将类 Data 的列表设为 dataListData 包含两个变量 ab

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);
    }

}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...