web-dev-qa-db-fra.com

Comment vérifier si la valeur de la 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 fait est que si la valeur de String est "true" ou "false", la valeur de retour doit être true. Dans toute autre valeur, cela devrait être faux.

J'ai essayé ceux-ci:

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 ont renvoyé false :(

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

Il n'existe aucune méthode pour vérifier si une chaîne code un booléen. pour tous les effets pratiques, toute chaîne non "vraie" est "fausse".

48
mfx
return "true".equals(value) || "false".equals(value);
31
Bombe

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
12
BillMan

Peut aussi le faire par regex:

Pattern queryLangPattern = Pattern.compile("true|false", Pattern.CASE_INSENSITIVE);
Matcher matcher = queryLangPattern.matcher(booleanParam);
return matcher.matches();
4
Raymond Lazarus
if ("true".equals(value) || "false".equals(value)) {
  // do something
} else {
  // do something else
}
4
lutz

Les méthodes que vous appelez dans 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: put "true" dans la chaîne, elles retournent true, put " false "dans la chaîne, ils renvoient false.

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

Enveloppez cela dans une méthode ContainsBoolString et c'est parti.

MODIFIER
Au fait, 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 bien 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 longtemps que je n'ai pas utilisé Java ...

4
Thorsten Dittmar

En fait, il est impossible de rechercher un type booléen dans une chaîne (qui est un type). Fondamentalement, vous demandez comment faire une "comparaison de chaîne".

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

Je pense que Boolean.valueOf () est votre ami, javadoc dit:

Retourne un booléen avec une valeur représentée par la chaîne spécifiée. La valeur booléenne renvoyée représente la valeur true si l'argument de chaîne n'est pas null et égal à la chaîne "true", en ignorant la casse. 

Exemple: Boolean.valueOf ("True") renvoie true.
Exemple: Boolean.valueOf ("yes") renvoie false.

3
Stefan Hendriks
String value = "True";
boolean result = value.equalsIgnoreCase("true") ? true : false;
3
Nick

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

Il y a peut-être un malentendu: les méthodes ne testent pas, si le contenu de String représente une valeur booléenne, elles évaluent le contenu de String en booléen.

2
Andreas_D

Regardez aussi org.Apache.commons.lang.BooleanUtils # toBoolean (Java.lang.String), ainsi que beaucoup d'autres fonctions utiles.

1
Jens Kreidler
  function isBooleanString(val) {
    if (val === "true" || val === "false"){
      return true
    } else {
      return false
    }
  }
isBooleanString("true") // true
isBooleanString("false") // true

isBooleanString("blabla") // false
0
Marian07
return value.equals("false") || value.equals("true");
0
David Hedlund

Vous devez également prendre en compte le caractère du personnage ...

Au lieu de:

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

Faire ceci:

return value.equalsIgnoreCase("false") || value.equalsIgnoreCase("true");
0
Stuart

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 d'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
user123125209123

Je vous suggère de consulter la documentation Java pour ces méthodes. Il semble que vous ne les utilisiez pas correctement. Ces méthodes ne vous diront pas si la chaîne est une valeur booléenne valide, mais renverront plutôt un booléen, défini sur true ou false, en fonction de la chaîne que vous avez transmise, "true" ou "false".

http://www.j2ee.me/javase/6/docs/api/Java/lang/Boolean.html

0
Dan Polites

Voir la documentation Oracle

public static boolean parseBoolean(String s) {
        return ((s != null) && s.equalsIgnoreCase("true"));
    }
0
Almas Abdrazak