我希望能够评估存储为字符串的布尔表达式,如下所示:
"hello" == "goodbye" && 100 < 101
我知道SO上已经有很多这样的问题了,但是我问这个问题因为我已经尝试过这个问题最常见的答案,BeanShell,它允许评估像这样的语句
"hello" == 100
没有任何麻烦.有没有人知道一个FOSS解析器会抛出操作数不匹配等错误?或者BeanShell中有一个设置可以帮助我吗?我已经尝试过Interpreter.setStrictJava(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中,您可以动态调用编译器,如本文所述:
http://www.ibm.com/developerworks/java/library/j-jcomp/index.html
您可以使用它将表达式动态编译为Java类,如果您尝试将字符串与数字进行比较,则会抛出类型错误.