【问题标题】:Evaluating mathematical expression given as String评估以字符串形式给出的数学表达式
【发布时间】:2020-12-20 14:45:21
【问题描述】:

我有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 -&gt;System.out.println(//some code to evaluate the expression));

提前致谢

【问题讨论】:

    标签: java stream mathematical-expressions


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 1970-01-01
      • 2010-12-17
      相关资源
      最近更新 更多