Як перетворити об'єкт String в бульний об'єкт?


Відповіді:


516

Спробуйте (залежно від типу типу результату):

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

Перевага:

  • Boolean: це не створює нових примірників Boolean, тому продуктивність краща (і менше збирання сміття). Він повторно використовує два екземпляри Boolean.TRUEабо Boolean.FALSE.
  • boolean: жоден екземпляр не потрібен, ви використовуєте примітивний тип.

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


ОНОВЛЕНО:

Автобоксинг також можна використовувати, але він має вартість продуктивності.
Я пропоную використовувати його лише тоді, коли вам доведеться відігравати себе, а не тоді, коли акторський склад можна уникнути.


1
все-таки не призначати Boolean.valueOf boolaen2 автоматично не відключити коробку? Я не бачу різниці тут, щоб розбиратиБолевські.
Алекс Фейнман

9
Найбільша проблема полягає в тому, що Boolean не буде винятком, коли бачить щось, чого не повинен приймати. Він поверне істину для всього, що бачить як "справжнє", а також поверне помилковим для всього іншого . Якщо ви намагаєтеся примусити відповідати рядок до відповідного булевого значення, вам доведеться додати додаткову логіку, щоб вручну вибирати незаконні випадки.
Брендон Бельвін

що якщо я використовуюboolean boolean2 = Boolean.valueOf("true");
vipin8169

1
якщо об'єкт String є нульовим, тоді Boolean.valueOf (String) поверне помилкове значення. Але Boolean може також містити нульове значення .може вам надати будь-яку допомогу для цього.
amit kate

90

Ви повинні бути обережними при використанні Boolean.valueOf (string) або Boolean.parseBoolean (string) . Причиною цього є те, що методи завжди повертаються помилковими, якщо String не дорівнює "true" (випадок ігнорується).

Наприклад:

Boolean.valueOf("YES") -> false

Через таку поведінку я рекомендую додати якийсь механізм, щоб переконати, що рядок, який повинен бути переведений в булевий формат, відповідає заданому формату.

Наприклад:

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

9
Це найкращий приклад, який я бачив, і з чого слід було реалізувати булевий тип. Для багатьох застосувань важливим є виняток для невірного булевого значення.
Брендон Белвін

2
Ні, це не зовсім правда. ось основна реалізація публічного статичного parseBoolean статичного boolean parseBoolean (String s) {return ((s! = null) && s.equalsIgnoreCase ("true")); }
електрика

Хе ... Якщо вам потрібно написати такий код, то вам не потрібно телефонувати Boolean.valueOf. Натомість ви можете просто переструктурувати це, якщо заява, щоб воно

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 року, найкращий спосіб для цього - використовувати апаші BooleanUtils.toBoolean.

Це перетворить будь-яке булеве, як рядок, булеве, наприклад, Y, так, 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.
Дхана

плюс до зусиль зі збору всіх випадків використання.
gaurav

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

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). Це лише набір відповідей на подібні запитання. Це може бути дивно використовувати бібліотеку для такої простої проблеми, але це справді допомагає у багатьох подібних випадках.

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