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

324

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

Суреш Чаганти
источник
2
Какова стоимость строки?
Джеймс Гудвин
2
Что вы ожидаете от того, как строка должна быть преобразована в логическое значение?
Стив Куо
1
myvartypeboolean = !! valuetoconvert

Ответы:

516

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

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

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

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

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


ОБНОВЛЕНО:

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

KLE
источник
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
}
zlajo
источник
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(игнорируя регистр).

CJS
источник
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");

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

PhiLho
источник
9

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

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

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

david30xie
источник
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.");
    }

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

AechoLiu
источник
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
Dhana
источник
Что такое 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)$)" );
}
Chrstph SLN
источник
0

Мы создали библиотеку soyuz-to, чтобы упростить эту проблему (конвертировать X в Y). Это просто набор SO ответов на аналогичные вопросы. Может быть странно использовать библиотеку для такой простой задачи, но она действительно помогает во многих подобных случаях.

import io.thedocs.soyuz.to;

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

Пожалуйста, проверьте это - это очень просто и имеет много других полезных функций

fedor.belov
источник
-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

Vesco Pro
источник
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