当前位置: 首页 > 知识库问答 >
问题:

Java中的布尔表达式求值

臧翰采
2023-03-14

我正在寻找一种相对简单的(与编写解析器相比)方法来计算Java中的布尔表达式,我不想使用JEP库。

我有一个字符串表达式,如:(x

有没有一种方法可以评估这个表达式?

请记住,这可以是任何级别的深度,因此编写解析器将非常复杂。


共有3个答案

袁耀
2023-03-14

您可以使用Java6中的脚本引擎,并选择任何流行的脚本语言,如Scala、Ruby、Python、Groovy和Javascript。您所要做的就是确保要计算的表达式使用正确的语言。Groovy可能是最简单的,并且集成效果最好。

我已经成功地将这种方法用于提供功能的功能,就像流行的电子表格应用程序中的公式/计算列一样。

东门宜
2023-03-14

使用jexl(http://commons.apache.org/jexl/),可以这样完成

    JexlEngine jexl = new JexlEngine();
    jexl.setSilent(true);
    jexl.setLenient(true);

    Expression expression = jexl.createExpression("(a || b && (c && d))");
    JexlContext jexlContext = new MapContext();

    //b and c and d should pass
    jexlContext.set("b",true);
    jexlContext.set("c",true);
    jexlContext.set("d",true);

    assertTrue((Boolean)expression.evaluate(jexlContext));

    jexlContext = new MapContext();

    //b and c and NOT d should be false
    jexlContext.set("b",true);
    jexlContext.set("c",true);

    //note this works without setting d to false on the context
    //because null evaluates to false

    assertFalse((Boolean)expression.evaluate(jexlContext));
濮阳研
2023-03-14

使用Apache Commons Jexl;这正是为这样的需求而设计的。

http://commons.apache.org/jexl/

 类似资料:
  • 本文向大家介绍OCaml 布尔表达式的求值,包括了OCaml 布尔表达式的求值的使用技巧和注意事项,需要的朋友参考一下 示例 我们定义布尔表达式的类型,其原子由字符串标识为 并可以通过oracle : string -> bool给出原子的值来评估这些表达式,如下所示: 了解该功能如何清晰易读。由于正确使用了模式匹配,因此读取此功能的程序员只需很少的时间即可确保其正确实现。

  • 我开始学习布尔表达式。我正试图找出以下问题: 假设age1、age2和age3是int变量,假设答案是布尔变量。编写一个表达式,当age1小于或等于age2并且age2小于或等于age3时,该表达式将答案指定为true。否则答案应为false。 我已经尝试了一些东西,但对Java来说还是比较陌生的。我能把答案打印出来,但我的数字还是有问题。 这是错误的: 我只是不知道如何解决这个问题,或者代码中到

  • 问题内容: 我正在寻找一种相对简单的方法(与编写解析器相比)来评估Java中的布尔表达式,并且我不想使用JEP库。 我有一个String表达式,例如:我的目标是用值替换变量。 有没有一种方法可以评估此​​表达式? 请记住,这可以是任何深度,因此编写解析器将非常复杂。 问题答案: 您可以使用Java6中的脚本引擎,并选择任何流行的脚本语言,例如Scala,Ruby,Python,Groovy和Jav

  • 问题内容: 所以我有一个关于考试作业的问题,在这个作业中,我们有一堆布尔表达式,例如: 然后,我们应该编写布尔表达式的值。为此,我使用了三值逻辑,但是当您获得如下所示的布尔表达式时,这将如何应用: 或者 通过三值逻辑可以很容易地找到第一个,但是我如何找出另外两个。 我知道这是一个非常基本的问题,但是我对此仍然是陌生的。 提前致谢 问题答案: 您需要布尔值和的三相真值表: 该表是缩写,依赖于布尔逻辑

  • 问题内容: 假设我有以下表达式 Eclipse警告我,布尔表达式的第二个短语中可能为空。但是,我知道有些人会在第一个条件失败的情况下完全退出布尔表达式。Java是否正确?还是不能保证评估顺序? 问题答案: 但是,我知道有些人会在第一个条件失败的情况下完全退出布尔表达式。Java是否正确? 是的,这就是所谓的短路评估。操作员喜欢和是执行此类操作的操作员。 还是不能保证评估顺序? 不,可以保证评估的顺

  • 我有两个实体:类别和具有一对多关系的产品。 如果价格大于100,我如何按产品数量订购类别?类似(这不起作用):