Comment vérifier si la valeur de chaîne est de type booléen en Java?

J'ai fait une petite recherche à ce sujet mais je n'ai rien trouvé d'utile.

Le point étant que si la valeur de chaîne est "true" ou "false", la valeur de retour devrait être true. Dans toutes les autres valeurs, il devrait être faux.

J'ai essayé ces:

String value = "false";
System.out.println("test1: " + Boolean.parseBoolean(value));
System.out.println("test2: " + Boolean.valueOf(value));
System.out.println("test3: " + Boolean.getBoolean(value));

Toutes les fonctions renvoyées false: (

32
demandé sur Hubert Kario 2009-11-19 15:13:28

16 réponses

  • parseBoolean (String) renvoie true si la chaîne est (insensible à la casse) "true", sinon false
  • valueOf (String) idem, renvoie les objets booléens canoniques
  • getBoolean (String) est un hareng rouge; il récupère la propriété système du nom donné et le compare à "true"

Il n'existe pas de méthode pour tester si une chaîne code un booléen; pour tous les effets pratiques, toute chaîne non-"true"est " false".

47
répondu mfx 2009-11-19 12:36:15
return "true".equals(value) || "false".equals(value);
30
répondu Bombe 2009-11-19 12:16:36

Apache commons-lang3 a BooleanUtils avec une méthode toBooleanObject:

BooleanUtils.toBooleanObject(String str)

// where: 

BooleanUtils.toBooleanObject(null)    = null
BooleanUtils.toBooleanObject("true")  = Boolean.TRUE
BooleanUtils.toBooleanObject("false") = Boolean.FALSE
BooleanUtils.toBooleanObject("on")    = Boolean.TRUE
BooleanUtils.toBooleanObject("ON")    = Boolean.TRUE
BooleanUtils.toBooleanObject("off")   = Boolean.FALSE
BooleanUtils.toBooleanObject("oFf")   = Boolean.FALSE
BooleanUtils.toBooleanObject("blue")  = null
11
répondu BillMan 2016-04-08 16:01:59
if ("true".equals(value) || "false".equals(value)) {
  // do something
} else {
  // do something else
}
4
répondu 2009-11-19 12:16:12

Les méthodes que vous appelez sur la classe Boolean ne vérifient pas si la chaîne contient une valeur booléenne VALIDE, mais elles renvoient la valeur booléenne qui représente le contenu de la chaîne: mettez "true" dans la chaîne, elles retournent true, Mettez "false" dans la chaîne, elles retournent false.

Vous pouvez sûrement utiliser ces méthodes, cependant, pour vérifier les valeurs booléennes valides, car je m'attendrais à ce qu'elles lancent une exception si la chaîne contient "hello" ou quelque chose qui n'est pas booléen.

Envelopper cela dans une méthode ContainsBoolString et vous allez.

Modifier
En passant, en C#, il existe des méthodes comme bool Int32.TryParse(string x, out int i) qui vérifient si le contenu peut être analysé, puis renvoient le résultat analysé.

int i;
if (Int32.TryParse("Hello", out i))
  // Hello is an int and its value is in i
else
  // Hello is not an int

Les repères indiquent qu'ils sont beaucoup plus rapides que les suivants:

int i;
try
{
   i = Int32.Parse("Hello");
   // Hello is an int and its value is in i
}
catch
{
   // Hello is not an int
}

Peut-être Existe-t-il des méthodes similaires en Java? Cela fait un moment que J'ai utilisé Java...

4
répondu Thorsten Dittmar 2009-11-19 12:30:32

Peut aussi le faire par regex:

Pattern queryLangPattern = Pattern.compile("true|false", Pattern.CASE_INSENSITIVE);
Matcher matcher = queryLangPattern.matcher(booleanParam);
return matcher.matches();
4
répondu Raymond Lazarus 2011-08-23 11:03:13

En fait, la vérification D'un type booléen dans une chaîne (qui est un type) est impossible. Fondamentalement, vous demandez comment faire une "comparaison de chaîne".

Comme d'autres l'ont déclaré. Vous devez définir quand vous voulez retourner "true" ou "false" (dans quelles conditions). Voulez-vous qu'il soit sensible à la casse? Si la valeur est null?

Je pense booléen.valueOf() est votre ami, javadoc dit:

Renvoie un Booléen avec une valeur représentée par la Chaîne spécifiée. Le booléen retourné représente la valeur true si l'argument string n'est pas null et est égal, en ignorant la casse, à la chaîne "true".

Exemple: Booléen.valueOf ("True") renvoie true.
Exemple: Boolean.valueOf("oui") renvoie la valeur false.

3
répondu Stefan Hendriks 2009-11-19 15:59:59
String value = "True";
boolean result = value.equalsIgnoreCase("true") ? true : false;
3
répondu Nick 2012-08-07 19:08:40

Oui, mais, n'avez-vous pas analyser "faux"? Si vous analysez "true", ils retournent true.

Peut-être y a-t-il un malentendu: les méthodes ne testent pas, si le contenu de la chaîne représente une valeur booléenne, elles évaluent le contenu de la chaîne en booléen.

2
répondu Andreas_D 2009-11-19 12:16:53

Eh bien pour cela, jetez également un oeil à org.Apache.commun.lang.BooleanUtils#toBoolean (java.lang.String), ainsi que de nombreuses autres fonctions utiles.

1
répondu Jens Kreidler 2013-01-09 10:01:53
return value.equals("false") || value.equals("true");
0
répondu David Hedlund 2009-11-19 12:16:46

Quelque chose que vous devriez également prendre en considération est le boîtier de caractères...

Au Lieu de:

return value.equals("false") || value.equals("true");

Faites ceci:

return value.equalsIgnoreCase("false") || value.equalsIgnoreCase("true");
0
répondu Stuart 2009-11-19 12:25:33

Je vous suggère de jeter un oeil aux documents Java pour ces méthodes. Il semble que vous les utilisez correctement. Ces méthodes ne vous diront pas si la chaîne est une valeur booléenne VALIDE, mais elles renvoient plutôt un booléen, défini sur true ou false, basé sur la chaîne que vous transmettez, "true" ou "false".

Http://www.j2ee.me/javase/6/docs/api/java/lang/Boolean.html

0
répondu Dan Polites 2009-11-19 12:39:51

Voici une méthode que vous pouvez utiliser pour vérifier si une valeur est un booléen:

boolean isBoolean(String value) {
    return value != null && Arrays.stream(new String[]{"true", "false", "1", "0"})
            .anyMatch(b -> b.equalsIgnoreCase(value));
}

Exemples de son utilisation:

System.out.println(isBoolean(null)); //false
System.out.println(isBoolean("")); //false
System.out.println(isBoolean("true")); //true
System.out.println(isBoolean("fALsE")); //true
System.out.println(isBoolean("asdf")); //false
System.out.println(isBoolean("01truefalse")); //false
0
répondu user123125209123 2017-02-26 02:00:57

Voir Oracle docs

public static boolean parseBoolean(String s) {
        return ((s != null) && s.equalsIgnoreCase("true"));
    }
0
répondu Almas Abdrazak 2017-06-14 09:11:21
  function isBooleanString(val) {
    if (val === "true" || val === "false"){
      return true
    } else {
      return false
    }
  }
isBooleanString("true") // true
isBooleanString("false") // true

isBooleanString("blabla") // false
0
répondu Marian07 2018-01-10 16:21:12