Jak przekonwertować String
obiekt na Boolean
obiekt?
Jak przekonwertować String
obiekt na Boolean
obiekt?
Odpowiedzi:
Spróbuj (w zależności od rodzaju pożądanego wyniku):
Boolean boolean1 = Boolean.valueOf("true");
boolean boolean2 = Boolean.parseBoolean("true");
Korzyść:
Boolean.TRUE
lub Boolean.FALSE
.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ąć.
boolean boolean2 = Boolean.valueOf("true");
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
}
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 ... :-))
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!
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ą.
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
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.
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
parseBoolean(String s)
nie zgłasza wyjątku, zgodnie z Javadoc.
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)$)" );
}
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
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
null
jest 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
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