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


Ответы:


516

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

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

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

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

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


ОБНОВЛЕНО:

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


1
не будет ли назначение Boolean.valueOf boolaen2 автоматически распаковываться? Я не вижу разницы в parseBoolean здесь.
Алекс Фейнман

9
Самая большая проблема заключается в том, что Boolean не будет исключать, когда он видит то, что не должен принимать. Он вернет true для всего, что он видит как «true», и вернет false для всего остального . Если вы пытаетесь принудительно сопоставить строку с соответствующим логическим значением, вам придется добавить дополнительную логику, чтобы вручную отлавливать недопустимые случаи.
Брэндон Белвин

Что boolean boolean2 = Boolean.valueOf("true");
делать,

1
если объект String имеет значение null, то Boolean.valueOf (String) вернет false. Но Boolean также может содержать нулевое значение. Можете ли вы предоставить какую-либо помощь для этого.
amit kate

90

Вы должны быть осторожны при использовании 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
}

9
Это лучший пример, который я видел, и что должно было быть реализовано в логическом типе для начала. Создание исключения для недопустимого логического значения важно для многих приложений.
Брэндон Белвин

2
Нет, это не совсем так. вот базовая реализация parseBoolean: public static static boolean parseBoolean (String s) {return ((s! = null) && s.equalsIgnoreCase ("true")); }
electricbah

Хех ... Если вам нужно написать такой код, то вам не нужно вызывать Boolean.valueOf. Вместо этого вы можете просто реструктурировать этот оператор if, чтобы он делал то, что вы хотите ;-)

22
Boolean b = Boolean.valueOf(string);

Значение btrue, если строка не является нулевой и равна 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");

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



9

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

Это преобразует любую логическую строку в логическую, например, Y, да, true, N, нет, 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 из API Apache commons Lang.
Дхана

плюс за усилия по сбору всех вариантов использования.
Гаурав

1

Вот как я это сделал:

"1##true".contains( string )

Для моего случая это в основном либо 1, либо правда. Я использую хеши в качестве разделителей.


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

Если есть ошибка, он вернет ноль. Пример:

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)

Разбирает строковый аргумент как логическое значение. Возвращаемое логическое значение представляет значение true, если строковый аргумент не nullравен и равен (без учета регистра) строке " true".

Параметры:

s - строка, содержащая логическое представление для анализа

Возвращает: логическое значение, представленное строковым аргументом

С: 1.5


1
Хотя текст вопроса не является явным, это вопрос о Java. По крайней мере, это так. Этот ответ может сбить людей с толку.
paulo.albuquerque

-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
Это очень хакерское предложение по преобразованию String в логическое значение, которое просто не имеет смысла.
saw303
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.