TJ-*_*TJ- 10 java expression boolean evaluate
我正在寻找一种相对简单(与编写解析器相比)的方法来评估Java中的布尔表达式,我不想使用JEP库.
我有一个像String这样的String表达式(x > 4 || x < 8 && p > 6),我的目标是用值替换变量.
有没有办法评估这个表达式?
请记住,这可能是任何级别的深度,因此编写解析器将非常复杂.
使用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));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15129 次 |
| 最近记录: |