String input = sc.nextLine();
System.out.println(Boolean.parseBoolean(input));
所以我的输入看起来像1 > 2
或false || true
,但我没有得到正确的值。
但是当我打电话时:
Boolean x = 1 < 2;
System.out.println(x);
我认为他们是正确的。所以我的问题是。 如何将String输入转换为返回布尔值?
到目前为止尝试过:
Boolean.parseBoolean();
Boolean.getBoolean();
Boolean.valueOf();
感谢您的回答。
修改
INPUT - OUTPUT
1 < 2 - false(should be true)
false || true - false(should be true)
答案 0 :(得分:4)
您可以使用ScriptEngine
:
ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
String input = "1 > 2";
System.out.println(engine.eval(input)); //prints false
答案 1 :(得分:1)
Boolean.parseBoolean(String)
实现为:
public static boolean parseBoolean(String s) {
return ((s != null) && s.equalsIgnoreCase("true"));
}
如果输入字符串不为null且等于true
(忽略大小写),则返回true
。否则返回false
。
您似乎期望Boolean.parseBoolean(String)
接受表达式字符串而评估字符串,但事实并非如此。
答案 2 :(得分:1)
当你编写System.out.println(1<2);
时它会起作用,因为有println()
的重载版本需要布尔值。但是当你传递一个字符串时,它将被视为仅字符串,而不是boolean
。
此外,Boolean.parseBoolean()
总是将字符串格式的布尔值(true \ false)作为参数,并以布尔格式返回相应的值,否则将始终返回false
答案 3 :(得分:0)
根据docs:
,Boolean.parseBoolean执行以下操作public static boolean parseBoolean(String s)
将字符串参数解析为布尔值。返回布尔值 如果字符串参数不为null,则表示值true 等于,忽略大小写,字符串&#34; true&#34;。
您尝试将评估的表达式传递给true或false,而不是字符串&#34; true&#34;或&#34; True&#34;或&#34; TRUE&#34;。因此,这将是这样的:
Boolean.parseBoolean("true"); // equals true
Boolean.parseBoolean("1 > 2"); // not the string "true", therefore returns false.
一般来说,您应该非常谨慎地对字符串中包含的代码进行动态执行。如果字符串是从用户传入的,那就非常危险。我的建议是找到更好的方法。
如果你真的需要这样做:
ScriptEngine
提及的其他答案之一。请注意,这会将字符串评估为 JavaScript ,而不是Java。对于简单的布尔表达式,这可能很好,但你应该知道它。 JavaScript有真实性的规则,有时令人困惑,他们不会在Java中评估相同。 例如,尝试在ScriptEngine中运行它:
1 > '0' // true in JavaScript, but probably unexpected in your code!