web-dev-qa-db-fra.com

Pouvons-nous compter sur String.isEmpty pour vérifier la condition null sur une chaîne en Java?

Je suis en train de passer un identifiant de compte en entrée d'un fichier XML comme indiqué, qui sera analysé plus tard et utilisé dans notre code:

<accountid>123456</accountid>
<user>pavan</user>

Le problème est que si rien n'est passé (la valeur null dans accoutnid) est passée en tant que accountid, je ne pourrais pas gérer cette situation en code Java. J'ai essayé cela mais je n'ai pas réussi:

if (acct != null||acct==""||acct.equals("")) 
{
    // the above is not working 
}

J'ai pu gérer cela avec succès en utilisant l'approche suivante:

if(!acct.isEmpty())
{
   // thisis working 
}

Pouvons-nous compter sur la méthode String.isEmpty() pour vérifier la condition null d'une String? Est-ce valide?

40
Kiran

Non, absolument pas - car si acct est null, il ne sera même pas get à isEmpty... il jettera immédiatement une NullPointerException.

Votre test devrait être:

if (acct != null && !acct.isEmpty())

Notez l'utilisation de && ici, plutôt que votre || dans le code précédent; Notez également que dans votre code précédent, vos conditions étaient de toute façon erronées - même avec &&, vous n'auriez entré le corps if que si acctétait une chaîne vide.

Sinon, utilisez Goyave :

if (!Strings.isNullOrEmpty(acct))
103
Jon Skeet

Utilisez StringUtils.isEmpty à la place, il recherchera également null.

Les exemples sont:

 StringUtils.isEmpty(null)      = true
 StringUtils.isEmpty("")        = true
 StringUtils.isEmpty(" ")       = false
 StringUtils.isEmpty("bob")     = false
 StringUtils.isEmpty("  bob  ") = false

Plus d'informations sur Documentation officielle sur String Utils .

16
lradacher

Vous ne pouvez pas utiliser String.isEmpty() s'il est null. Le mieux est d’avoir votre propre méthode pour vérifier null ou vide. 

public static boolean isBlankOrNull(String str) {
    return (str == null || "".equals(str.trim()));
}
6
Vaandu

Non, la méthode String.isEmpty() se présente comme suit:

public boolean isEmpty() {
    return this.value.length == 0;
}

comme vous pouvez le voir, il vérifie la longueur de la chaîneso vous devez absolument vérifier si la chaîne est nulle auparavant.

1
Martin Niederl
String s1=""; // empty string assigned to s1 , s1 has length 0, it holds a value of no length string

String s2=null; // absolutely nothing, it holds no value, you are not assigning any value to s2

donc null n'est pas identique à vide.

j'espère que cela pourra aider!!!

1
sdinesh94