2009-10-08 3 views
260

Comment convertir les objets String en Boolean objet?Comment convertir un objet String en objet booléen?

+1

Quelle est la valeur de la chaîne? –

+1

Quelle est votre attente de la façon dont une chaîne devrait être convertie en un booléen? –

+0

myvartypeboolean = !! valuetoconvert –

Répondre

416

Essayez (selon le type résultat que vous voulez):

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

Avantage:

  • Boolean: cela ne crée pas de nouvelles instances de Boolean, si la performance est meilleure (et moins garbage- collection). Il réutilise les deux instances de Boolean.TRUE ou de Boolean.FALSE.
  • booléen: aucune instance n'est nécessaire, vous utilisez le type primitif.

La documentation officielle se trouve dans le Javadoc.


MISE À JOUR:

Autoboxing pourrait aussi être utilisé, mais il a un coût de performance.
Je suggère de ne l'utiliser que lorsque vous devez vous lancer, pas lorsque le plâtre est évitable.

+0

n'attribuerait pas Boolean.valueOf à boolaen2 être auto-déballé de toute façon? Je ne vois pas la différence avec parseBoolean ici. –

+6

Le plus gros problème est que Boolean n'échappera pas quand il voit quelque chose qu'il ne devrait pas accepter. Il retournera vrai pour tout ce qu'il voit comme "vrai" et retournera faux pour * tout le reste *. Si vous essayez de faire correspondre une chaîne à une valeur booléenne appropriée, vous devrez ajouter une logique supplémentaire pour capturer les cas illégaux manuellement. –

+0

et si j'utilise 'boolean boolean2 = Boolean.valueOf (" true ");' – vipin8169

18
Boolean b = Boolean.valueOf(string); 

La valeur de b est vrai si la chaîne est un pas nul et égal à true (en ignorant cas).

77

Vous devez être prudent lors de l'utilisation Boolean.valueOf (string) ou Boolean.parseBoolean (string). La raison en est que les méthodes retourneront toujours false si la chaîne n'est pas égale à "vrai" (le cas est ignoré).

Par exemple:

Boolean.valueOf("YES") -> false 

En raison de ce comportement, je recommande d'ajouter un mécanisme pour faire en sorte que la chaîne qui devrait être traduit en une valeur booléenne suit un format spécifié.

Par exemple:

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

C'est le meilleur exemple que j'ai vu et ce qui aurait dû être implémenté dans le type booléen pour commencer. Le lancement d'une exception pour une valeur booléenne non valide est important pour de nombreuses applications. –

+1

Non ce n'est pas totalement vrai. Voici l'implémentation sous-jacente de parseBoolean public static boolean parseBoolean (Chaînes s) { return ((s! = Null) && s.equalsIgnoreCase ("true")); } – electricalbah

18

Outre l'excellente réponse de KLE, nous pouvons aussi faire quelque chose de plus souple:

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 ... :-))

10
boolean b = string.equalsIgnoreCase("true"); 
-3

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

Cela vous donnera une idée de ce qu'il faut faire.

C'est ce que je reçois de la Java documentation:

Méthode Détail

parseBoolean

public static boolean parseBoolean(String s)

parse l'argument de chaîne comme un booléen. Le booléen retourné représente la valeur true si l'argument de la chaîne n'est pas null et est égal, en ignorant le cas, à la chaîne "true".

Paramètres:

s - la chaîne contenant la représentation booléenne à analyser

Renvoie: le booléen représenté par l'argument de chaîne

depuis: 1,5

+1

Bien que le texte de la question ne soit pas explicite, il s'agit d'une question sur Java. Au moins, c'est étiqueté de cette façon. Cette réponse peut embrouiller les gens. –

0

Voici comment je l'ai fait:

"1##true".contains(string)

Pour mon cas est la plupart du temps 1 ou vrai. J'utilise des hachages comme diviseurs.

-2

vous pouvez régler directement équivalent valeur booléenne à une chaîne par classe système et l'accès partout ..

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 
2

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 
+4

Avez-vous essayé? :) 'parseBoolean (String s)' ne lance pas d'exception, selon Javadoc. – rapt

3
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 la chaîne en booléen.

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

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 
+0

Qu'est-ce que BooleanUtils? –

+0

org.apache.commons.lang3.BooleanUtils provient de Apache commons Lang API. – Dhana

0

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

Eh bien, comme maintenant janvier 2018, la meilleure façon pour cela est d'utiliser BooleanUtils.toBoolean de apache.

Cela convertira toute chaîne de type booléen en valeur booléenne, par ex. Y, oui, vrai, N, non, faux, etc.

Très pratique!