我希望能够计算存储为字符串的布尔表达式,如下所示:
"hello" == "goodbye" && 100 < 101
我知道已经有很多这样的问题了,但我问这个问题是因为我已经尝试过这个问题最常见的答案,豆壳 http://www.beanshell.org/,并且它允许对这样的语句进行评估
"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");
}
Edit:
我当前的代码返回此输出
result: false
没有错误。我希望它做的是抛出 EvalError 或某物让我知道存在不匹配的操作数。
在 Java 6 中,您可以动态调用编译器,如本文所述:
http://www.ibm.com/developerworks/java/library/j-jcomp/index.html http://www.ibm.com/developerworks/java/library/j-jcomp/index.html
您可以使用它来将表达式动态编译为 Java 类,如果您尝试将字符串与数字进行比较,则会抛出类型错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)