由于XOR位^运算符,Java中的JavaScript表达式的返回值类型不正确
Return value type is not correct for JavaScript expression in Java due to XOR bitwise ^ operator
我正在尝试评估这个表达式:
ScriptEngineManager sem = new ScriptEngineManager ()
ScriptEngine scriptEngine = sem.getEngineByName("js") ;
String expr = "true ^ true";
Boolean obj = (Boolean) scriptEngine.eval(expr);
但是返回的结果是java Double。我已经尝试了字符串expr的各种选项,如:
String expr = "0x1 ^ 0x0";
String expr = "1 ^ 0";
基本上,我希望能够使用JavaScript引擎来评估各种表达式,可能看起来像这样:
"ture && false || false (true || false && true || false XOR true)"
所有其他操作符,如&&或||工作很好,当我评估这样的表达式并返回布尔值,但当它来XOR(它有JavaScript等效的位运算符)它返回Double。我并不想将表达式转换为替换XOR的逻辑运算符(例如(true || false) &&!(真,,false))),因为这样我就必须解析整个表达式字符串以将异或转换为上面的逻辑表达式。我对这个表达式求值的全部意义是,这样我就可以在不解析其复杂性的情况下求值。
任何帮助将非常感激!提前感谢!
引用自此处:http://www.howtocreate.co.uk/xor.html
"不幸的是,JavaScript没有逻辑异或操作符。它有一个按位异或操作符^,可以对两个数字进行按位比较,但是当您想要获得两个表达式的异或结果时,这没有帮助,因为它们不返回数字。
异或运算符可以用以下方式模拟:
if( ( foo && !bar ) || ( !foo && bar ) ) {
...
}
或者少做一次操作(取决于foo和bar的值):
if( ( foo || bar ) && !( foo && bar ) ) {
...
}
或者使用三元运算符使其更小:
if( foo ? !bar : bar ) {
...
}
可以在JavaScript代码中使用双否定强制转换为布尔值:
Boolean obj = (Boolean) scriptEngine.eval("!!(" + expr + ")");
不使用异或,更自然的是写!=
,例如true != false
。如果这在Javascript中不起作用,我会感到惊讶。
我在没有任何明确的替代方案的情况下实现此解决方案:
boolean useDouble = false;
String expr = "true ^ false";
if(expr.contains("^"))
{
useDouble = true;
}
...
if(useDouble)
{
Double d = (Double) scriptEngine.eval(expr);
boolean r = (d != 0.0);
System.out.println(" result: " + r);
}
else
{
Boolean b = (Boolean)scriptEngine.equals(expr);
System.out.println(b.getClass().getName() + "result:" + b);
}
相关文章:
- 正则表达式(JavaScript),用于创建数字必须大于x的数据验证
- 如何编写用于id验证的正则表达式(JavaScript)
- 如何使用正则表达式 JavaScript 替换具有特定单词的整行
- 使用正则表达式Javascript验证字符串
- 使用正则表达式(Javascript Regex)验证表单
- 请帮助我处理正则表达式.JavaScript
- 如何仅替换以下正则表达式(JavaScript)的一部分
- 特定格式的正则表达式(javascript)
- 如何匹配正则表达式/JavaScript 中出现的特定长度
- 正则表达式 JavaScript 捕获直到(之前)可选字符串
- 如果字符串与正则表达式 JavaScript 不匹配,则返回 True
- 要添加到表达式的正则表达式 JavaScript
- 在计算链逻辑表达式 JavaScript 时出现意外结果
- 如何在分隔符正则表达式 javascript 之间选择 char
- 未出现在引号中的 URL 的正则表达式?(JavaScript)
- 你会如何使用正则表达式javascript来做到这一点
- 反斜杠 - 正则表达式 - Javascript
- 正则表达式 JavaScript with punct,space 和 alnum
- 正则表达式Javascript,以便知道模式是否包含在字符串中
- 比较正则表达式 JavaScript 中的字符串长度