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

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

我有班级名单 Data 作为 dataList , Data 包含两个变量 a 以及 b .

  1. public class Data {
  2. int a,b;
  3. public Data(int a, int b){
  4. this.a=a;
  5. this.b=b;
  6. }
  7. //also contains getter and setter method
  8. }
  9. List<Data> dataList=new ArrayList<>();
  10. dataList.add(new Data(2,3));
  11. 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 脚本将被执行。
然后你可以做:

  1. List<Data> dataList = new ArrayList<>();
  2. dataList.add(new Data(2, 3));
  3. dataList.add(new Data(6, 2));
  4. ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
  5. ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("JavaScript");
  6. dataList.forEach(data -> {
  7. try {
  8. System.out.println(scriptEngine.eval(data.getExpression("3*a+5*b")));
  9. } catch (ScriptException e) {
  10. e.printStackTrace();
  11. }
  12. });

Data 班级:

  1. public class Data {
  2. int a, b;
  3. public Data(int a, int b) {
  4. this.a = a;
  5. this.b = b;
  6. }
  7. public String getExpression(String expression) {
  8. return expression.replaceAll("a", "" + a).replaceAll("b", "" + b);
  9. }
  10. }
展开查看全部

相关问题