【问题标题】:Evaluating expressions in Java using JEP使用 JEP 评估 Java 中的表达式
【发布时间】:2022-11-07 20:39:20
【问题描述】:

我正在使用JEP(Java 表达式解析器)来满足需求。当有以下格式的表达式并将变量替换为数值时,一切都会顺利进行。

例如:

String formula = "(A || B )" ;
JEP jep = new JEP();
jep.addVariable("A", -1.0);
jep.addVariable("B", 0.0);
jep.parseExpression(formula);
Number value = jep.getValue();
System.out.println("Value: " +value);


-----------------------------

Value : 0.0

但是当 A 和 B 的值是布尔值时,例如(TRUE 或 FALSE),这会失败。谁能建议 JEP 如何支持布尔输入场景?

String formula = "(A || B )" ;
JEP jep = new JEP();
jep.addVariableAsObject("A", Boolean.TRUE); 
jep.addVariableAsObject("B", Boolean.TRUE); 

jep.parseExpression(formula);
Object val = jep.getValueAsObject();
System.out.println("Value: " +val); // gives null

【问题讨论】:

  • 在这种情况下,“失败”是什么意思?编译失败了吗?它有例外吗?如果是这样,异常/错误消息是什么?
  • 我的意思是它无法编译,我似乎不知道如何将布尔值传递给变量
  • 你不应该传递原语 true/false 吗? FALSETRUE 这些变量是什么?
  • 请看更新
  • documentation 没有提到布尔类型,所以它可能不受支持。

标签: java boolean


【解决方案1】:

cmets 错误,JEP Java 支持布尔值:http://www.singularsys.com/jep/doc/html/operators.html

我很困惑你在哪里找到了 addVariableAsObject、getValueAsObject 函数?在文档中它们不存在。

这工作正常:

    String formula = "(A || B )" ;
    Jep jep = new Jep();
    try {
        jep.addVariable("A", Boolean.TRUE); 
        jep.addVariable("B", Boolean.TRUE);
        jep.parse(formula);
        Object result = jep.evaluate();
        System.out.println("result = " + result);
    } catch (JepException e) {
        System.out.println("An error occurred: " + e.getMessage());
    }   

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多