Come convertire l'oggetto String in oggetto booleano?


324

Come convertire Stringoggetto in Booleanoggetto?


2
Qual è il valore della stringa?
James Goodwin,

2
Qual è la tua aspettativa su come una stringa dovrebbe essere convertita in un valore booleano?
Steve Kuo,

1
myvartypeboolean = !! valuetoconvert

Risposte:


516

Prova (a seconda del tipo di risultato desiderato):

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

Vantaggio:

  • Booleano: questo non crea nuove istanze di Booleano, quindi le prestazioni sono migliori (e meno garbage collection). Riutilizza le due istanze di uno Boolean.TRUEo Boolean.FALSE.
  • booleano: non è necessaria alcuna istanza, si utilizza il tipo primitivo.

La documentazione ufficiale è nel Javadoc .


AGGIORNAMENTO:

È possibile utilizzare anche il box automatico, ma ha un costo in termini di prestazioni.
Suggerisco di usarlo solo quando dovresti lanciarti, non quando il cast è evitabile.


1
l'assegnazione di Boolean.valueOf a boolaen2 non verrebbe comunque decompressa automaticamente? Non vedo la differenza di analizzare Beanean qui.
Alex Feinman,

9
Il problema più grande è che Boolean non farà eccezione quando vede qualcosa che non dovrebbe accettare. Restituirà vero per tutto ciò che vede come "vero" e restituirà falso per tutto il resto . Se stai cercando di imporre la corrispondenza di una stringa con un valore booleano appropriato, dovrai aggiungere ulteriore logica per rilevare manualmente i casi illegali.
Brandon Belvin,

cosa succede se usoboolean boolean2 = Boolean.valueOf("true");
vipin8169

1
se l'oggetto String è null, Boolean.valueOf (String) restituirà false. Ma Boolean può contenere anche un valore null .Puoi fornire qualsiasi aiuto per questo.
Kate, il

90

Devi stare attento quando usi Boolean.valueOf (stringa) o Boolean.parseBoolean (stringa) . La ragione di ciò è che i metodi restituiranno sempre false se la stringa non è uguale a "true" (il caso viene ignorato).

Per esempio:

Boolean.valueOf("YES") -> false

A causa di questo comportamento, consiglierei di aggiungere un meccanismo per garantire che la stringa che dovrebbe essere tradotta in un booleano segua un formato specificato.

Per esempio:

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

9
Questo è il miglior esempio che ho visto e che cosa avrebbe dovuto essere implementato nel tipo booleano per cominciare. Generare un'eccezione per un valore booleano non valido è importante per molte applicazioni.
Brandon Belvin,

2
No, non è del tutto vero. ecco l'implementazione sottostante di parseBoolean pubblica statica booleana parseBoolean (String s) {return ((s! = null) && s.equalsIgnoreCase ("true")); }
Electricalbah,

Heh ... Se hai bisogno di scrivere questo codice, non devi chiamare Boolean.valueOf. Invece puoi semplicemente ristrutturare questa istruzione if così farà quello che vuoi ;-)

22
Boolean b = Boolean.valueOf(string);

Il valore di bè vero se la stringa non è nulla e uguale a true(ignorando il caso).


17

Oltre all'eccellente risposta di KLE, possiamo anche rendere qualcosa di più flessibile:

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

(ispirato alla risposta di zlajo ... :-))


11
boolean b = string.equalsIgnoreCase("true");

9

Bene, come ora a gennaio 2018, il modo migliore per farlo è usare Apache BooleanUtils.toBoolean.

Questo convertirà qualsiasi stringa booleana come booleana, ad esempio Y, sì, vero, N, no, falso, ecc.

Davvero utile!


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

Il mio modo di convertire la stringa in booleano.


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

Risultato:

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

Che cos'è BooleanUtils?
james.garriss,

1
org.apache.commons.lang3.BooleanUtils proviene dall'API Lang di comuni comuni di Apache.
Dhana,

più per gli sforzi di raccolta di tutti i casi d'uso.
gaurav,

1

Ecco come l'ho fatto:

"1##true".contains( string )

Per il mio caso è principalmente 1 o vero. Uso gli hash come divisori.


0

Per ottenere il valore booleano di una stringa, prova questo:

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

Se si verifica un errore, verrà restituito null. Esempio:

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

5
Hai provato questo? :) parseBoolean(String s)non genera un'eccezione, secondo Javadoc.
Rapt

0

Perché non usare un'espressione regolare?

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

0

Abbiamo creato la libreria soyuz-to per semplificare questo problema (convertire X in Y). È solo una serie di risposte SO per domande simili. Potrebbe essere strano usare la libreria per un problema così semplice, ma aiuta davvero in molti casi simili.

import io.thedocs.soyuz.to;

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

Si prega di controllare - è molto semplice e ha molte altre utili funzioni


-3

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

Questo ti darà un'idea di cosa fare.

Questo è ciò che ottengo dalla documentazione Java :

Dettaglio del metodo

parseBoolean

public static boolean parseBoolean(String s)

Analizza l'argomento stringa come un valore booleano. Il valore booleano restituito rappresenta il valore vero se l'argomento stringa non nullè ed è uguale, ignorando il caso, alla stringa " true".

parametri:

s - la stringa contenente la rappresentazione booleana da analizzare

Restituisce: il valore booleano rappresentato dall'argomento stringa

Dal: 1.5


1
Sebbene il testo della domanda non sia esplicito, questa è una domanda su Java. Almeno è etichettato in questo modo. Questa risposta può confondere le persone.
paulo.albuquerque,

-3

puoi impostare direttamente un valore booleano equivalente a qualsiasi stringa per classe di sistema e accedervi ovunque ..

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
Questa è una proposta molto confusa di convertire una stringa in un valore booleano e non ha senso.
saw303,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.