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

hmtdttj4  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(272)

我有班级名单 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)); 提前谢谢

ltskdhd1

ltskdhd11#

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

}

相关问题