我可以严格计算Java中存储为字符串的布尔表达式吗?
我希望能够计算存储为字符串的布尔表达式,如下所示:我可以严格计算Java中存储为字符串的布尔表达式吗?,java,boolean,eval,beanshell,Java,Boolean,Eval,Beanshell,我希望能够计算存储为字符串的布尔表达式,如下所示: "hello" == "goodbye" && 100 < 101 一点也不麻烦。有谁知道FOSS解析器会因为操作数不匹配之类的事情而抛出错误?或者在比恩希尔有一个可以帮助我的环境?我已经尝试过解释器.setStritJava(true) 为了完整起见,以下是我目前使用的代码: Interpreter interpreter = new Interpreter(); interpreter.setStrictJava(t
"hello" == "goodbye" && 100 < 101
一点也不麻烦。有谁知道FOSS解析器会因为操作数不匹配之类的事情而抛出错误?或者在比恩希尔有一个可以帮助我的环境?我已经尝试过解释器.setStritJava(true) 为了完整起见,以下是我目前使用的代码:
Interpreter interpreter = new Interpreter();
interpreter.setStrictJava(true);
String testableCondition = "100 == \"hello\"";
try {
interpreter.eval("boolean result = ("+ testableCondition + ")");
System.out.println("result: "+interpreter.get("result"));
if(interpreter.get("result") == null){
throw new ValidationFailure("Result was null");
}
} catch (EvalError e) {
e.printStackTrace();
throw new ValidationFailure("Eval error while parsing the condition");
}
编辑:
我当前拥有的代码返回此输出
result: false
没有错误。我想让它做的是抛出一个EvalError或其他东西,让我知道存在不匹配的操作数。试试Java 6中的,您可以动态调用编译器,如本文所述: 您可以使用它将表达式动态编译为Java类,如果您尝试将字符串与数字进行比较,则会引发类型错误。使用Janino
它类似于java的eval,MVEL也很有用 在大多数情况下,执行评估的一行代码:
Object result = MVEL.eval(expression, rootObj);
“rootObj”可以为null,但如果提供了它,则可以引用其上的属性和方法,而无需进行限定。例如,“id”或“calculateMething()”如果groovy是一个选项,您可以尝试使用它。您当前的代码有什么问题吗?“有人知道FOSS解析器”==离题问题,这是一个很棒的链接。不幸的是,我需要一些与java 1.5兼容的东西。eval非常好,但我还需要一个string=functions
Object result = MVEL.eval(expression, rootObj);