如何将 String
对象转换为 Boolean
对象?
尝试以下方法(根据您所需的结果类型):
Boolean boolean1 = Boolean.valueOf("true");
boolean boolean2 = Boolean.parseBoolean("true");
优点:
Boolean.TRUE
或Boolean.FALSE
。官方文档在Javadoc中。
更新:
虽然自动装箱也可以使用,但是这有一定的性能成本。
我建议只在必须自己进行转换时才使用它,而不是在避免转换时使用。
boolean boolean2 = Boolean.valueOf("true");
会怎样? - Vipin Verma当你使用 Boolean.valueOf(string) 或 Boolean.parseBoolean(string) 时,必须小心。其原因是,如果字符串不等于“true”(忽略大小写),这些方法将始终返回false。
例如:
Boolean.valueOf("YES") -> false
因为这种行为,我建议添加一些机制来确保应翻译为布尔值的字符串遵循指定的格式。
例如:
if (string.equalsIgnoreCase("true") || string.equalsIgnoreCase("false")) {
Boolean.valueOf(string)
// do something
} else {
// throw some exception
}
Boolean b = Boolean.valueOf(string);
如果字符串不为空且等于true
(忽略大小写),则b
的值为true。
boolean b = string.equalsIgnoreCase("true") || string.equalsIgnoreCase("t") ||
string.equalsIgnoreCase("yes") || string.equalsIgnoreCase("y") ||
string.equalsIgnoreCase("sure") || string.equalsIgnoreCase("aye") ||
string.equalsIgnoreCase("oui") || string.equalsIgnoreCase("vrai");
boolean b = string.equalsIgnoreCase("true");
现在,2018年1月份最好的方法是使用apache的BooleanUtils.toBoolean
,这将把任何类似布尔值的字符串转换为布尔值,例如 Y、yes、true、N、no、false等。非常方便!
BooleanUtils
类:
String[] values= new String[]{"y","Y","n","N","Yes","YES","yes","no","No","NO","true","false","True","False","TRUE","FALSE",null};
for(String booleanStr : values){
System.out.println("Str ="+ booleanStr +": boolean =" +BooleanUtils.toBoolean(booleanStr));
}
结果:
Str =N: boolean =false
Str =Yes: boolean =true
Str =YES: boolean =true
Str =yes: boolean =true
Str =no: boolean =false
Str =No: boolean =false
Str =NO: boolean =false
Str =true: boolean =true
Str =false: boolean =false
Str =True: boolean =true
Str =False: boolean =false
Str =TRUE: boolean =true
Str =FALSE: boolean =false
Str =null: boolean =false
BooleanUtils
仍然存在问题(虽然比 Boolean
方法少一些),因为如果值既不被识别为 true
也不被识别为 false
,它将不会抛出异常。因此,ture
(某人在某处的拼写错误)仍然被盲目地认为是 false
。我在 Guava 中也找不到任何东西(例如在 23.0 版本中没有 Booleans.stringConverter
)。 - ddekanypublic static boolean stringToBool(String s) {
s = s.toLowerCase();
Set<String> trueSet = new HashSet<String>(Arrays.asList("1", "true", "yes"));
Set<String> falseSet = new HashSet<String>(Arrays.asList("0", "false", "no"));
if (trueSet.contains(s))
return true;
if (falseSet.contains(s))
return false;
throw new IllegalArgumentException(s + " is not a boolean.");
}
将字符串转换为布尔值的方法。
"1##true".contains( string )
如果你只是想将这个字符串变量与“false”或“true”字符串进行比较,而不是硬编码这两个值,就像我的情况一样,并且你不想使用Boolean.valueOf()
,因为它会将任何被视为“true”的东西返回为true,并将其他所有东西返回为false,正如Brandon指出的那样,你可以采取以下措施。
if (someStringVariable.equals(Boolean.TRUE.toString())) {
...
}
或类似的方式,
if (someStringVariable.equals(Boolean.FALSE.toString())) {
...
}