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

我将类 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));

提前致谢

candycandysweet 回答:计算以字符串形式给出的数学表达式

您可以使用 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);
    }

}
本文链接:https://www.f2er.com/1220208.html

大家都在问