如何将字符串对象转换为布尔对象?


Answers:


516

尝试(取决于您想要的结果类型):

Boolean boolean1 = Boolean.valueOf("true");
boolean boolean2 = Boolean.parseBoolean("true");

优点:

  • 布尔值:这不会创建布尔值的新实例,因此性能更好(并且垃圾回收更少)。它重用了Boolean.TRUE或的两个实例Boolean.FALSE
  • 布尔值:不需要实例,您使用原始类型。

官方文档在Javadoc中


更新:

也可以使用自动装箱,但是会降低性能。
我建议仅在需要强制转换时才使用它,而不是在可以避免的情况下使用。


1
不会将boolean.valueOf分配给boolaen2是否自动取消装箱?我在这里没有看到与parseBoolean的区别。
Alex Feinman

9
最大的问题是布尔值在看到不应该接受的内容时不会例外。对于它视为“ true”的所有内容,它将返回true;对于其他所有内容,它将返回false 。如果要强制将字符串匹配为适当的布尔值,则必须添加额外的逻辑来手动捕获非法案件。
布兰登·贝尔文

如果我使用boolean boolean2 = Boolean.valueOf("true");
vipin8169

1
如果String对象为null,则Boolean.valueOf(String)将返回false。但是Boolean也可以保留null值。您能为此提供任何帮助吗?
阿米特·凯特

90

使用Boolean.valueOf(string)Boolean.parseBoolean(string)时必须小心。这样做的原因是,如果String不等于“ true”,则方法将始终返回false(忽略大小写)。

例如:

Boolean.valueOf("YES") -> false

由于这种行为,我建议添加某种机制以确保应转换为布尔值的字符串遵循指定的格式。

例如:

if (string.equalsIgnoreCase("true") || string.equalsIgnoreCase("false")) {
    Boolean.valueOf(string)
    // do something   
} else {
    // throw some exception
}

9
这是我所见过的最好的示例,并且应该从Boolean类型开始实施。对于无效的布尔值引发异常对于许多应用程序很重要。
Brandon Belvin

2
不,那不是完全正确的。这是parseBoolean public static boolean parseBoolean(String s){return((s!= null)&& s.equalsIgnoreCase(“ true”))的基础实现。}
electricalbah

嘿...如果您需要编写此类代码,则无需调用Boolean.valueOf。相反,您可以简单地重组此if语句,以便它将执行您想要的操作;-)

22
Boolean b = Boolean.valueOf(string);

b如果字符串不是null且等于true(忽略大小写),则值为true 。


17

除了KLE的出色答案,我们还可以使事情变得更加灵活:

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");

(受zlajo的回答启发... :-))



9

好吧,就像现在的2018年1月一样,最好的方法是使用apache's BooleanUtils.toBoolean

这会将任何布尔型字符串转换为布尔型,例如Y,yes,true,N,no,false等。

真的好用!


4
public 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.");
    }

我将字符串转换为布尔值的方法。


3
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?
james.garriss

1
org.apache.commons.lang3.BooleanUtils来自Apache commons Lang API。
Dhana's

加上收集所有用例的努力。
gaurav '19


0

要获取字符串的布尔值,请尝试以下操作:

public boolean toBoolean(String s) {
    try {
        return Boolean.parseBoolean(s); // Successfully converted String to boolean
    } catch(Exception e) {
        return null; // There was some error, so return null.
    }
}

如果有错误,它将返回null。例:

toBoolean("true"); // Returns true
toBoolean("tr.u;e"); // Returns null

5
你有试过吗?parseBoolean(String s)根据Javadoc,:) 不会引发异常。
全神贯注

0

为什么不使用正则表达式?

public static boolean toBoolean( String target )
{
    if( target == null ) return false;
    return target.matches( "(?i:^(1|true|yes|oui|vrai|y)$)" );
}

0

我们创建了soyuz-to库来简化此问题(将X转换为Y)。这只是针对类似问题的一组SO答案。使用库来解决这样一个简单的问题可能很奇怪,但是在许多类似情况下确实有帮助。

import io.thedocs.soyuz.to;

Boolean aBoolean = to.Boolean("true");

请检查它-非常简单,并具有许多其他有用的功能


-3

造访http://msdn.microsoft.com/en-us/library/system.boolean.parse.aspx

这将使您知道该怎么做。

这是我从Java文档中得到的:

方法细节

parseBoolean

public static boolean parseBoolean(String s)

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

参数:

s -包含要解析的布尔表示形式的字符串

返回:字符串参数表示的布尔值

由于: 1.5


1
尽管问题的内容不是很明确,但这是关于Java的问题。至少它是用这种方式标记的。这个答案会使人困惑。
paulo.albuquerque,2014年

-3

您可以通过System类直接设置等于任何字符串的布尔值,然后在任何位置访问它。

System.setProperty("n","false");
System.setProperty("y","true");

System.setProperty("yes","true");     
System.setProperty("no","false");

System.out.println(Boolean.getBoolean("n"));   //false
System.out.println(Boolean.getBoolean("y"));   //true   
 System.out.println(Boolean.getBoolean("no"));  //false
System.out.println(Boolean.getBoolean("yes"));  //true

1
这是将字符串转换为布尔值的非常棘手的建议,没有任何意义。
saw303 '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.