Wie konvertiere ich ein String-Objekt in ein Boolesches Objekt?

324

Wie konvertiere ich StringObjekt zu BooleanObjekt?

Suresh Chaganti
quelle
2
Was ist der Wert des Strings?
James Goodwin
2
Was erwarten Sie davon, wie ein String in einen Booleschen Wert konvertiert werden soll?
Steve Kuo
1
myvartypeboolean = !! valueetoconvert

Antworten:

516

Versuchen Sie es (je nachdem, welchen Ergebnistyp Sie möchten):

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

Vorteil:

  • Boolean: Dadurch werden keine neuen Instanzen von Boolean erstellt, sodass die Leistung besser ist (und weniger Speicherbereinigung erfolgt). Die beiden Instanzen von entweder Boolean.TRUEoder werden wiederverwendet Boolean.FALSE.
  • Boolescher Wert: Es wird keine Instanz benötigt. Sie verwenden den primitiven Typ.

Die offizielle Dokumentation befindet sich im Javadoc .


AKTUALISIERT:

Autoboxing könnte auch verwendet werden, hat aber Leistungskosten.
Ich schlage vor, es nur zu verwenden, wenn Sie sich selbst besetzen müssten, nicht, wenn die Besetzung vermeidbar ist.

KLE
quelle
1
Würde die Zuweisung von Boolean.valueOf zu boolaen2 nicht trotzdem automatisch entpackt werden? Ich sehe hier keinen Unterschied zu parseBoolean.
Alex Feinman
9
Das größte Problem ist, dass Boolean keine Ausnahme macht, wenn es etwas sieht, das es nicht akzeptieren sollte. Es wird für alles, was es als "wahr" ansieht, als wahr und für alles andere als falsch zurückgegeben . Wenn Sie versuchen, das Abgleichen einer Zeichenfolge mit einem geeigneten booleschen Wert zu erzwingen, müssen Sie zusätzliche Logik hinzufügen, um illegale Fälle manuell abzufangen.
Brandon Belvin
Was ist, wenn ich benutzeboolean boolean2 = Boolean.valueOf("true");
Vipin8169
1
Wenn das String-Objekt null ist, gibt Boolean.valueOf (String) false zurück. Boolean kann jedoch auch den Wert null enthalten. Können Sie hierfür eine Hilfe bereitstellen?
Amit Kate
90

Sie müssen vorsichtig sein, wenn Sie Boolean.valueOf (Zeichenfolge) oder Boolean.parseBoolean (Zeichenfolge) verwenden . Der Grund dafür ist, dass die Methoden immer false zurückgeben, wenn der String nicht gleich "true" ist (der Fall wird ignoriert).

Zum Beispiel:

Boolean.valueOf("YES") -> false

Aufgrund dieses Verhaltens würde ich empfehlen, einen Mechanismus hinzuzufügen, um sicherzustellen, dass die Zeichenfolge, die in einen Booleschen Wert übersetzt werden soll, einem bestimmten Format folgt.

Zum Beispiel:

if (string.equalsIgnoreCase("true") || string.equalsIgnoreCase("false")) {
    Boolean.valueOf(string)
    // do something   
} else {
    // throw some exception
}
zlajo
quelle
9
Dies ist das beste Beispiel, das ich gesehen habe, und was hätte im Booleschen Typ implementiert werden sollen. Das Auslösen einer Ausnahme für einen ungültigen Booleschen Wert ist für viele Anwendungen wichtig.
Brandon Belvin
2
Nein, das ist nicht ganz richtig. Hier ist die zugrunde liegende Implementierung von parseBoolean public static boolean parseBoolean (String s) {return ((s! = null) && s.equalsIgnoreCase ("true")); }
electricbah
Heh ... Wenn Sie solchen Code schreiben müssen, müssen Sie Boolean.valueOf nicht aufrufen. Stattdessen können Sie diese if-Anweisung einfach umstrukturieren, damit sie das tut, was Sie wollen ;-)
22
Boolean b = Boolean.valueOf(string);

Der Wert von bist true, wenn die Zeichenfolge nicht null und gleich ist true(Groß- und Kleinschreibung ignorieren).

CJS
quelle
17

Neben der hervorragenden Antwort von KLE können wir auch etwas flexibler machen:

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

(inspiriert von Zlajos Antwort ... :-))

PhiLho
quelle
11
boolean b = string.equalsIgnoreCase("true");
Zed
quelle
9

Nun, wie jetzt im Januar 2018, ist der beste Weg, Apache zu verwenden BooleanUtils.toBoolean.

Dadurch werden alle booleschen Zeichenfolgen in boolesche Werte konvertiert, z. B. Y, yes, true, N, no, false usw.

Wirklich praktisch!

david30xie
quelle
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.");
    }

Meine Art, einen String in einen Booleschen Wert umzuwandeln.

AechoLiu
quelle
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));
}

Ergebnis:

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
quelle
Was ist BooleanUtils?
James.garriss
1
org.apache.commons.lang3.BooleanUtils stammt aus der Lang-API von Apache Commons.
Dhana
Plus für die Bemühungen, alle Anwendungsfälle zu sammeln.
Gaurav
1

So habe ich es gemacht:

"1##true".contains( string )

Für meinen Fall ist meistens entweder 1 oder wahr. Ich benutze Hashes als Teiler.

Tomislav Boras
quelle
0

Versuchen Sie Folgendes, um den booleschen Wert eines Strings zu erhalten:

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

Wenn ein Fehler auftritt, wird null zurückgegeben. Beispiel:

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

quelle
5
Hast du das versucht? :) parseBoolean(String s)wirft laut Javadoc keine Ausnahme.
Rapt
0

Warum nicht einen regulären Ausdruck verwenden?

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

Wir haben Sojuz-to erstellt Bibliothek erstellt, um dieses Problem zu vereinfachen (X in Y konvertieren). Es ist nur eine Reihe von SO-Antworten auf ähnliche Fragen. Es mag seltsam sein, die Bibliothek für ein so einfaches Problem zu verwenden, aber es hilft in vielen ähnlichen Fällen wirklich.

import io.thedocs.soyuz.to;

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

Bitte überprüfen Sie es - es ist sehr einfach und hat viele andere nützliche Funktionen

fedor.belov
quelle
-3

Besuchen Sie http://msdn.microsoft.com/en-us/library/system.boolean.parse.aspx

Dies gibt Ihnen eine Vorstellung davon, was zu tun ist.

Folgendes erhalte ich aus der Java-Dokumentation :

Methodendetail

parseBoolean

public static boolean parseBoolean(String s)

Analysiert das String-Argument als Booleschen Wert. Der zurückgegebene Boolesche Wert stellt den Wert true dar, wenn das Zeichenfolgenargument nicht nullund ohne Berücksichtigung der Groß- und Kleinschreibung der Zeichenfolge " true" entspricht.

Parameter:

s - Der String, der die zu analysierende boolesche Darstellung enthält

Rückgabe: Der durch das Zeichenfolgenargument dargestellte Boolesche Wert

Seit: 1.5

Vesco Pro
quelle
1
Obwohl der Text der Frage nicht explizit ist, handelt es sich um eine Frage zu Java. Zumindest ist es so markiert. Diese Antwort kann Menschen verwirren.
Paulo.albuquerque
-3

Sie können den booleschen Wert, der einer beliebigen Zeichenfolge nach Systemklasse entspricht, direkt festlegen und überall darauf zugreifen.

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
quelle
1
Dies ist ein sehr hackiger Vorschlag, einen String in einen Booleschen Wert umzuwandeln, und macht einfach keinen Sinn.
saw303