如何检查String中的String值是否为布尔类型?

Rag*_*nar 38 java string boolean

我对此做了一点搜索,但找不到任何有用的东西.

关键是如果String值为"true"或"false",则返回值应为true.在其他每一个值中都应该是假的.

我试过这些:

String value = "false";
System.out.println("test1: " + Boolean.parseBoolean(value));
System.out.println("test2: " + Boolean.valueOf(value));
System.out.println("test3: " + Boolean.getBoolean(value));
Run Code Online (Sandbox Code Playgroud)

所有函数返回false :(

mfx*_*mfx 53

  • 如果String是(不区分大小写)"true",则parseBoolean(String)返回true,否则返回false
  • valueOf(String)ditto,返回规范的布尔对象
  • getBoolean(String)是一个红鲱鱼; 它获取给定名称的System属性并将其与"true"进行比较

没有方法来测试String是否编码布尔值; 对于所有实际效果,任何非"true"-String都是"false".

  • 好吧,没有BooleanFormatException,但是通过使用Apache Commons的BooleanUtils.toBooleanObject,如果无法解析字符串,将返回null值,这非常有用. (13认同)
  • 没错,可以想象一个"BooleanFormatException"异常,类似于当您尝试解析非数字String时发生的NumberFormatException.对于目标环境(机顶盒和浏览器等嵌入式系统),我认为在编写库时(1996年),它被认为是不必要的. (5认同)
  • 好的,这就是我需要知道的。我想知道为什么将任何非“真”字符串设为假是可行的?我的意思是在我看来,有效的输入应该是真假,其他一切都不是布尔输入。 (2认同)

Bom*_*mbe 37

return "true".equals(value) || "false".equals(value);
Run Code Online (Sandbox Code Playgroud)

  • 你可以使用`true.toString`和`false.toString`代替硬编码``true``和``false``,以防万一"true"和"false"的字符串表示发生变化;) (29认同)
  • 在其他语言中,"1"和"0"也被认为对布尔字符串解析有效,所以我不太喜欢"hardcode true和false"-approach.OTO OP引入了对真假的限制,那么...... (2认同)
  • @Ragnar正如我在上面的评论中指出的那样,你应该使用String.equalsIgnoreCase(String s). (2认同)

Bil*_*Man 17

Apache commons-lang3的BooleanUtils带有toBooleanObject方法:

BooleanUtils.toBooleanObject(String str)

// where: 

BooleanUtils.toBooleanObject(null)    = null
BooleanUtils.toBooleanObject("true")  = Boolean.TRUE
BooleanUtils.toBooleanObject("false") = Boolean.FALSE
BooleanUtils.toBooleanObject("on")    = Boolean.TRUE
BooleanUtils.toBooleanObject("ON")    = Boolean.TRUE
BooleanUtils.toBooleanObject("off")   = Boolean.FALSE
BooleanUtils.toBooleanObject("oFf")   = Boolean.FALSE
BooleanUtils.toBooleanObject("blue")  = null
Run Code Online (Sandbox Code Playgroud)


小智 5

if ("true".equals(value) || "false".equals(value)) {
  // do something
} else {
  // do something else
}
Run Code Online (Sandbox Code Playgroud)


小智 5

也可以通过正则表达式来完成:

Pattern queryLangPattern = Pattern.compile("true|false", Pattern.CASE_INSENSITIVE);
Matcher matcher = queryLangPattern.matcher(booleanParam);
return matcher.matches();
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以使用以下方法来检查值是否为布尔值:

boolean isBoolean(String value) {
    return value != null && Arrays.stream(new String[]{"true", "false", "1", "0"})
            .anyMatch(b -> b.equalsIgnoreCase(value));
}
Run Code Online (Sandbox Code Playgroud)

使用它的例子:

System.out.println(isBoolean(null)); //false
System.out.println(isBoolean("")); //false
System.out.println(isBoolean("true")); //true
System.out.println(isBoolean("fALsE")); //true
System.out.println(isBoolean("asdf")); //false
System.out.println(isBoolean("01truefalse")); //false
Run Code Online (Sandbox Code Playgroud)