我需要评估我在String中收到的带括号的布尔表达式。由于我需要处理变量表达式,我需要找到一种方法将其解析为一个布尔表达式,以便在java中对其进行求值。 String表达式的示例是:
String boolexpr1 = "(!(true||false)&&!((true)^(true)))"
可能的运算符是括号,AND,OR,XOR,NOT。由于这已经是一个Java可处理的表达式,我认为应该很容易解析它,但是想不出一个优雅的解决方案。我也在网上找到了一些代码,但它要么与其他/更少的运营商打交道,没有括号,要么仍然太复杂。
答案 0 :(得分:3)
如果你正在使用Spring,你可以使用SpEL,它支持相同的布尔表达式,如下所示:
使用示例:
ExpressionParser ep = new SpelExpressionParser();
Expression exp = ep.parseExpression("(!(true||false)&&!((true) != (true)))");
exp.getValue(Boolean.class);
布尔值的XOR运算符(^
)的工作原理与Not Equal运算符(!=
)完全相同,因此您可以将其映射到该值。
答案 1 :(得分:0)
我找到了一个使用JavaScript的解决方案:
String boolexpr1 = "(!(true||false)&&!((true)^(true)))"
boolean result = (Boolean) new ScriptEngineManager().getEngineByName("javascript").eval(boolexpr1);
没想到它会那么简单。