web-dev-qa-db-fra.com

Comment convertir un objet String en objet booléen?

Comment convertir un objet String en un objet Boolean?

309
Suresh Chaganti

Essayez (en fonction du type de résultat souhaité):

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

Avantage:

  • Boolean: cela ne crée pas de nouvelles instances de Boolean, donc les performances sont meilleures (et moins de garbage collection). Il réutilise les deux instances de Boolean.TRUE ou Boolean.FALSE.
  • boolean: aucune instance n'est nécessaire, vous utilisez le type primitif.

La documentation officielle est dans le Javadoc .


MIS À JOUR:

La substitution automatique pourrait également être utilisée, mais elle a un coût de performance.
Je suggère de l’utiliser uniquement lorsque vous devez vous lancer vous-même, et non lorsque le casting est évitable.

496
KLE

Vous devez être prudent lorsque vous utilisez Boolean.valueOf (chaîne) ou Boolean.parseBoolean (chaîne). La raison en est que les méthodes renverront toujours false si String n'est pas égal à "true" (la casse est ignorée).

Par exemple:

Boolean.valueOf("YES") -> false

En raison de ce comportement, je recommanderais d'ajouter un mécanisme pour s'assurer que la chaîne qui doit être traduite en un booléen suit un format spécifié.

Par exemple:

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

La valeur de b est vraie si la chaîne n'est pas nulle et égale à true (en ignorant la casse).

21
CJS

Outre l'excellente réponse de KLE, nous pouvons également apporter quelque chose de plus flexible:

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

(inspiré par la réponse de zlajo ... :-))

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

Comme en janvier 2018, la meilleure façon de procéder consiste à utiliser le BooleanUtils.toBoolean d'Apache.

Cela convertira n'importe quel booléen tel que string en boolean, par exemple. Oui, vrai, N, non, faux, etc.

Vraiment pratique!

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

Ma façon de convertir une chaîne en booléen.

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

Résultat:

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
2
Dhana

Voici comment je l'ai fait:

"1##true".contains( string )

Pour mon cas, c'est principalement 1 ou vrai. J'utilise des hachages comme séparateurs.

0
Tomislav Boras

Pourquoi ne pas utiliser une expression régulière?

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

Nous avons créé la bibliothèque soyuz-to pour simplifier ce problème (convertir X en Y). C'est juste un ensemble de SO réponses à des questions similaires. Cela peut paraître étrange d’utiliser la bibliothèque pour un problème aussi simple, mais cela aide vraiment dans beaucoup de cas similaires.

import io.thedocs.soyuz.to;

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

S'il vous plaît vérifier - c'est très simple et a beaucoup d'autres fonctionnalités utiles

0
fedor.belov

Pour obtenir la valeur booléenne d'une chaîne, essayez ceci:

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

S'il y a une erreur, il retournera null. Exemple:

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