Jak przekonwertować obiekt String na obiekt boolowski?

324

Jak przekonwertować Stringobiekt na Booleanobiekt?

Suresh Chaganti
źródło
2
Jaka jest wartość ciągu?
James Goodwin,
2
Jakie są Twoje oczekiwania na temat konwersji łańcucha na wartość logiczną?
Steve Kuo,
1
myvartypeboolean = !! valueetoconvert

Odpowiedzi:

516

Spróbuj (w zależności od rodzaju pożądanego wyniku):

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

Korzyść:

  • Boolean: nie tworzy to nowych instancji Boolean, więc wydajność jest lepsza (i mniej wyrzucania elementów bezużytecznych). Ponownie wykorzystuje dwa wystąpienia jednego Boolean.TRUElub Boolean.FALSE.
  • boolean: nie jest wymagana żadna instancja, używasz typu pierwotnego.

Oficjalna dokumentacja znajduje się w Javadoc .


AKTUALIZACJA:

Można również użyć automatycznego porównywania, ale wiąże się to z obniżeniem wydajności.
Sugeruję, aby używać go tylko wtedy, gdy będziesz musiał rzucić się, a nie wtedy, gdy można tego uniknąć.

KLE
źródło
1
czy i tak nie przypisałoby Boolean.valueOf do boolaen2? Nie widzę tutaj różnicy w porównaniu z parseBoolean.
Alex Feinman,
9
Największym problemem jest to, że Boolean nie będzie wyjątek, gdy zobaczy coś, czego nie powinien zaakceptować. Zwróci prawdę dla wszystkiego, co uważa za „prawdę”, i zwróci fałsz dla wszystkiego innego . Jeśli próbujesz wymusić dopasowanie ciągu do odpowiedniej wartości logicznej, musisz dodać dodatkową logikę, aby ręcznie wychwytywać nielegalne przypadki.
Brandon Belvin,
co jeśli boolean boolean2 = Boolean.valueOf("true");
użyję
1
jeśli obiekt String ma wartość NULL, to Boolean.valueOf (String) zwróci wartość false. Ale Boolean może również przechowywać wartość NULL. czy możesz w tym pomóc.
amit kate,
90

Należy zachować ostrożność podczas korzystania z Boolean.valueOf (ciąg) lub Boolean.parseBoolean (ciąg) . Powodem tego jest to, że metody zawsze zwracają wartość false, jeśli ciąg znaków nie jest równy „true” (wielkość liter jest ignorowana).

Na przykład:

Boolean.valueOf("YES") -> false

Z powodu takiego zachowania zaleciłbym dodanie mechanizmu zapewniającego, że ciąg znaków, który powinien zostać przetłumaczony na wartość logiczną, ma określony format.

Na przykład:

if (string.equalsIgnoreCase("true") || string.equalsIgnoreCase("false")) {
    Boolean.valueOf(string)
    // do something   
} else {
    // throw some exception
}
zlajo
źródło
9
To najlepszy przykład, jaki widziałem i na początek powinien był zostać zaimplementowany w typie boolowskim. Zgłoszenie wyjątku z powodu niepoprawnej wartości logicznej jest ważne dla wielu aplikacji.
Brandon Belvin,
2
Nie, to nie do końca prawda. tutaj jest podstawowa implementacja publicznego statycznego boolean parseBoolean parseBoolean (String s) {return ((s! = null) && s.equalsIgnoreCase („true”)); }
electricbah
Heh ... Jeśli musisz napisać taki kod, nie musisz wywoływać Boolean.valueOf. Zamiast tego możesz po prostu zrestrukturyzować tę instrukcję if, aby
22
Boolean b = Boolean.valueOf(string);

Wartość b true, jeśli ciąg znaków nie jest pusty i równy true(ignorując liter).

CJS
źródło
17

Oprócz doskonałej odpowiedzi KLE możemy również uczynić coś bardziej elastycznym:

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

(zainspirowany odpowiedzią zlajo ... :-))

PhiLho
źródło
11
boolean b = string.equalsIgnoreCase("true");
Zed
źródło
9

Cóż, podobnie jak teraz w styczniu 2018 roku, najlepszym sposobem na to jest użycie apache BooleanUtils.toBoolean.

Spowoduje to konwersję dowolnego ciągu typu logicznego na boolean, np. Y, tak, prawda, N, nie, fałsz itp.

Naprawdę przydatne!

david30xie
źródło
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.");
    }

Mój sposób na konwersję łańcucha znaków na wartość logiczną.

AechoLiu
źródło
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));
}

Wynik:

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
źródło
Co to jest BooleanUtils?
james.garriss
1
org.apache.commons.lang3.BooleanUtils pochodzi z Apache commons Lang API.
Dhana
plus za wysiłek zebrania wszystkich przypadków użycia.
gaurav,
1

Oto jak to zrobiłem:

"1##true".contains( string )

W moim przypadku jest to albo 1 albo prawda. Używam skrótów jako dzielników.

Tomislav Boras
źródło
0

Aby uzyskać wartość boolowską ciągu, spróbuj tego:

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

Jeśli wystąpi błąd, zwróci wartość null. Przykład:

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

źródło
5
Próbowałeś tego? :) parseBoolean(String s)nie zgłasza wyjątku, zgodnie z Javadoc.
zachwycił
0

Dlaczego nie użyć wyrażenia regularnego?

public static boolean toBoolean( String target )
{
    if( target == null ) return false;
    return target.matches( "(?i:^(1|true|yes|oui|vrai|y)$)" );
}
Chrstph SLN
źródło
0

Stworzyliśmy bibliotekę Soyuz-To, aby uprościć ten problem (przekonwertuj X na Y). To tylko zestaw SO odpowiedzi na podobne pytania. Używanie biblioteki w przypadku tak prostego problemu może być dziwne, ale naprawdę pomaga w wielu podobnych przypadkach.

import io.thedocs.soyuz.to;

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

Sprawdź to - jest bardzo prosty i ma wiele innych przydatnych funkcji

fedor.belov
źródło
-3

Odwiedzić http://msdn.microsoft.com/en-us/library/system.boolean.parse.aspx

To da ci wyobrażenie o tym, co robić.

Oto, co otrzymuję z dokumentacji Java :

Szczegół metody

parseBoolean

public static boolean parseBoolean(String s)

Analizuje argument ciągu jako wartość logiczną. Zwracana wartość logiczna reprezentuje wartość true, jeśli argument ciągu nie nulljest i jest równy, ignorując wielkość liter, ciągowi „ true”.

Parametry:

s - ciąg zawierający reprezentację logiczną, którą należy przeanalizować

Zwraca: wartość logiczna reprezentowana przez argument ciągu

Od: 1.5

Vesco Pro
źródło
1
Chociaż tekst pytania nie jest jednoznaczny, jest to pytanie dotyczące Javy. Przynajmniej jest tak oznaczony. Ta odpowiedź może mylić ludzi.
paulo.albuquerque,
-3

możesz bezpośrednio ustawić wartość logiczną równoważną dowolnemu ciągowi według klasy System i uzyskać do niego dostęp w dowolnym miejscu ..

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
Prateek Singh
źródło
1
Jest to bardzo nieuczciwa propozycja konwersji ciągu znaków na wartość logiczną i po prostu nie ma sensu.
saw303