Boolean.parseBoolean("1")= false ...?

Tho*_*son 68 java

很遗憾是一个痛苦...我有: HashMap<String, String> o

o.get('uses_votes'); // "1"
Run Code Online (Sandbox Code Playgroud)

然而...

Boolean.parseBoolean(o.get('uses_votes')); // "false"
Run Code Online (Sandbox Code Playgroud)

我猜这....parseBoolean不接受标准0 = false 1 = true

我做错了什么或者我必须将我的代码包装在:

boolean uses_votes = false;
if(o.get('uses_votes').equals("1")) {
    uses_votes = true;
}
Run Code Online (Sandbox Code Playgroud)

谢谢

Bal*_*usC 83

它只接受"true"表示布尔值的字符串值true.你能做的最好的是

boolean uses_votes = "1".equals(o.get("uses_votes"));
Run Code Online (Sandbox Code Playgroud)

或者,如果Map实际上代表了"权利",我认为Javabean要好得多.或者,如果它代表配置设置,您可能需要查看Apache Commons Configuration.

  • @Gabe相反,`Boolean.parseBoolean(java.lang.String)`如果得到的不是"true"或"false",则不会抛出`Exception`.每当它获得除"true"或"TRUE"之外的其他内容时,它只返回`false`作为字符串.[grepcode](http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/Boolean.java#Boolean.parseBoolean%28java.lang.String% 29) (3认同)
  • 啊,那有点垃圾!好吧,这不只是我。我会用你的建议。:) 谢谢 (2认同)

Saq*_*qib 25

我有一个小的实用程序函数将所有可能的值转换为布尔值.

private boolean convertToBoolean(String value) {
    boolean returnValue = false;
    if ("1".equalsIgnoreCase(value) || "yes".equalsIgnoreCase(value) || 
        "true".equalsIgnoreCase(value) || "on".equalsIgnoreCase(value))
        returnValue = true;
    return returnValue;
}
Run Code Online (Sandbox Code Playgroud)

  • 为什么不直接返回"1".equalsIgnoreCase(value)|| "是".equalsIgnoreCase(value)|| "true".equalsIgnoreCase(value)|| "接通" .equalsIgnoreCase(值); (8认同)

mel*_*okb 11

根据文件(强调我的):

将字符串参数解析为布尔值.返回的布尔值表示如果字符串参数不为空且 与字符串"true"相等(忽略大小写),则返回true.


Rei*_*ica 9

如果你想要获得C的行为(0 == false以及其他一切true),你可以这样做:

boolean uses_votes = Integer.parseInt(o.get("uses_votes")) != 0;
Run Code Online (Sandbox Code Playgroud)


And*_*Dev 5

我知道这是一个旧线程,但是从C语法中借用呢:

(o.get('uses_votes')).equals("1") ? true : false;
Run Code Online (Sandbox Code Playgroud)

  • `?true:false`末尾是一个众所周知的反模式:由于没有特殊原因,它仅键入了14个额外的字符,因为左侧已经是布尔值,并对其进行测试以决定是否返回true或假是愚蠢的。 (4认同)