Как преобразовать объект String в объект Boolean? - PullRequest
305 голосов
/ 08 октября 2009

Как преобразовать String объект в Boolean объект?

Ответы [ 13 ]

493 голосов
/ 08 октября 2009

Попробуйте (в зависимости от того, какой тип результата вы хотите):

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

Преимущество:

  • Boolean: это не создает новых экземпляров Boolean, поэтому производительность выше (и меньше сборщик мусора). Он использует два экземпляра: Boolean.TRUE или Boolean.FALSE.
  • логический: экземпляр не нужен, вы используете примитивный тип.

Официальная документация находится в Javadoc .


ОБНОВЛЕНО:

Можно также использовать автобокс, но он требует снижения производительности.
Я предлагаю использовать его только тогда, когда вам придется кастовать себя, а не тогда, когда каста можно избежать.

87 голосов
/ 08 октября 2009

Вы должны быть осторожны при использовании Boolean.valueOf (строка) или Boolean.parseBoolean (строка) . Причина этого в том, что методы всегда будут возвращать false, если строка не равна «true» (регистр игнорируется).

Например:

Boolean.valueOf("YES") -> false

Из-за этого поведения я бы порекомендовал добавить некоторый механизм, обеспечивающий соответствие строки, которая должна быть преобразована в логическое значение, указанному формату.

Например:

if (string.equalsIgnoreCase("true") || string.equalsIgnoreCase("false")) {
    Boolean.valueOf(string)
    // do something   
} else {
    // throw some exception
}
21 голосов
/ 08 октября 2009
Boolean b = Boolean.valueOf(string);

Значение b равно true, если строка не равна нулю и равна true (без учета регистра).

17 голосов
/ 08 октября 2009

Помимо превосходного ответа 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");

(вдохновленный ответом Злахо ...: -))

11 голосов
/ 08 октября 2009
boolean b = string.equalsIgnoreCase("true");
9 голосов
/ 23 января 2018

Что ж, как и в январе 2018 года, лучший способ для этого - использовать Apache BooleanUtils.toBoolean.

Это преобразует любую логическую строку в логическую, например, Да, да, да, нет, ложь и т. Д.

Действительно удобно!

3 голосов
/ 10 декабря 2015
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.");
    }

Мой способ преобразования строки в логическое значение.

2 голосов
/ 05 февраля 2016
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
0 голосов
/ 03 июля 2016

Почему бы не использовать регулярное выражение?

public static boolean toBoolean( String target )
{
    if( target == null ) return false;
    return target.matches( "(?i:^(1|true|yes|oui|vrai|y)$)" );
}
0 голосов
/ 28 июля 2015

Чтобы получить логическое значение строки, попробуйте это:

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.
    }
}

В случае ошибки возвращается ноль. Пример:

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