2015-11-07 95 views
0
String input = sc.nextLine(); 
    System.out.println(Boolean.parseBoolean(input)); 

所以我投入的样子1 > 2false || true,但我没有得到正确的价值观。使用字符串输入布尔

但是,当我打电话:

Boolean x = 1 < 2; 
    System.out.println(x); 

我让他们正确的。所以我的问题是。 如何将字符串输入转换为返回布尔值?

到目前为止已经试过:

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 
+0

我其实已经在js中完成了这项工作,但是我不知道ScriptEngine有这样的事情,谢谢! – Seven

1

Boolean.parseBoolean(String)实现为:

public static boolean parseBoolean(String s) { 
    return ((s != null) && s.equalsIgnoreCase("true")); 
} 

所以它返回true如果输入〜应变g不为空并且等于true(忽略大小写)。否则返回false

你似乎认为Boolean.parseBoolean(String)接受一个表达式字符串,评估字符串,但事实并非如此。

1

当你编写System.out.println(1<2);它的工作原理是因为有一个带有布尔值的println()的重载版本。但是当你传递一个字符串时,它将被视为仅字符串,而不是boolean

此外,Boolean.parseBoolean()始终以布尔值(真\假)以字符串格式作为参数,并相应在布尔格式值返回,否则将始终返回false

0

Boolean.parseBoolean将执行以下操作,根据该docs

公共静态布尔parseBoolean(String s)将

将字符串参数分析为boolean值。返回的布尔值 表示如果字符串参数不为空,并且 等于(忽略大小写)字符串“true”,则值为true。

您正在尝试将评估为真或假的表达来传递,而不是字符串“true”或“真”或“TRUE”。因此,这将如下工作:

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一样简单。但是,对于Java代码的内存中编译,This post可能很有用。