当前位置:  开发笔记 > 编程语言 > 正文

Java中的布尔表达式评估

如何解决《Java中的布尔表达式评估》经验,为你挑选了3个好方法。

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

我有一个像String这样的String表达式(x > 4 || x < 8 && p > 6),我的目标是用值替换变量.

有没有办法评估这个表达式?

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



1> Venkat Sadas..:

使用Apache Commons Jexl; 这正是为这种要求而设计的.

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



2> Matthew Kirk..:

使用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));



3> basszero..:

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

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

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有