我正在尝试计算这个表达式:
ScriptEngineManager sem = new ScriptEngineManager ()
ScriptEngine scriptEngine = sem.getEngineByName("js") ;
String expr = "true ^ true";
Boolean obj = (Boolean) scriptEngine.eval(expr);
但是返回的结果是java Double。我尝试了 String expr 的各种选项,例如:
字符串表达式 = "0x1 ^ 0x0";
String expr = "1 ^ 0";
基本上我希望能够使用 JavaScript 引擎来评估可能如下所示的各种表达式:
"ture && false || false (true || false && true || false XOR true)"
所有其他运算符,如 && 或 ||当我评估此类表达式并返回 boolean 值时工作得很好,但当它出现 XOR(它具有等效的 JavaScript 按位 ^ 运算符)时,它返回 Double。我真的不想将表达式转换为将 XOR 替换为某些逻辑运算符(例如 ((true || false) && !(true && false)) ),因为那样我就必须解析整个表达式字符串以转换 XOR变成上面的逻辑表达式。我对这个表达式求值的全部意义在于,我能够在无需解析其复杂性的情况下进行求值。
任何帮助将不胜感激!提前致谢!
最佳答案
从这里引用:http://www.howtocreate.co.uk/xor.html
“不幸的是,JavaScript 没有逻辑异或运算符。它有一个按位异或运算符 ^ 可以对两个数字进行按位比较,但是当你想获得两个表达式的异或结果时这无济于事, 不返回数字。
异或运算符可以用这个来模拟:
if( ( foo && !bar ) || ( !foo && bar ) ) {
...
}
或者少一个操作(取决于 foo 和 bar 的值):
if( ( foo || bar ) && !( foo && bar ) ) {
...
}
或者使用三元运算符使其更小:
if( foo ? !bar : bar ) {
...
}
关于java - 由于 XOR 按位 ^ 运算符,Java 中的 JavaScript 表达式的返回值类型不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14364078/