使用字符串输入作为布尔值

时间:2015-11-07 18:33:32

标签: java boolean user-input

    String input = sc.nextLine();
    System.out.println(Boolean.parseBoolean(input));

所以我的输入看起来像1 > 2false || 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)

4 个答案:

答案 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!
  • 如果要在Java中正确执行此操作,可以使用Java Compiler API。不幸的是,它并不像简单地将表达式作为字符串提供给ScriptEngine那么简单。但是,This post对于Java代码的内存中编译可能很有用。