72 votes

Peut-on se fier à String.isEmpty pour vérifier la condition de nullité d'une chaîne en Java ?

Je passe un numéro 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é (valeur nulle dans accoutnid) est passé comme accountid, je n'ai pas pu gérer cette situation dans le code Java. J'ai essayé mais je n'ai pas réussi :

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

J'ai pu traiter ce problème avec succès en utilisant l'approche suivante :

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

Pouvons-nous compter sur le String.isEmpty() méthode pour vérifier la condition nulle d'un String ? Est-ce valable ?

171voto

Jon Skeet Points 692016

Non, absolument pas - parce que si acct est nul, il ne sera même pas obtenir a isEmpty ... il lancera immédiatement un 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 comment dans votre code précédent, vos conditions étaient de toute façon erronées - même avec && vous n'auriez saisi que le if le corps si acct était une chaîne vide.

On peut aussi utiliser Goyave :

if (!Strings.isNullOrEmpty(acct))

36voto

lradacher Points 430

Utilisez StringUtils.isEmpty à la place, il vérifiera également la présence de null.

En voici quelques exemples :

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

Voir plus sur Documentation officielle sur les String Utils .

9voto

Vaandu Points 2200

Vous ne pouvez pas utiliser String.isEmpty() si elle est nulle. Le mieux est d'avoir votre propre méthode pour vérifier si un objet est nul ou vide.

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

3voto

Martin Niederl Points 137

Non, le 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îne de caractères. donc vous devez certainement vérifier si la chaîne est nulle avant.

2voto

Maarten Koller Points 1

Je pense que la réponse encore plus courte que vous aimerez est : StringUtils.isBlank(acct) ;

Dans la documentation : http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringUtils.html#isBlank%28java.lang.String%29

isBlank
public static boolean isBlank(String str)
Checks if a String is whitespace, empty ("") or null.

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

Parameters:
str - the String to check, may be null
Returns:
true if the String is null, empty or whitespace

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X