Question

Je suis à la recherche par le biais du code existant et trouver cas où ils le font:

if ((name == null) || (name.matches("\\s*")))
   .. do something

Ignorer pour le moment que l'appel .matches(..) crée un nouveau modèle et matcher chaque fois (uhg) - mais est-il une raison de ne pas modifier cette ligne à:

if (StringUtils.isBlank(name))
   ..do something

Je suis assez sûr que l'expression régulière correspond simplement si la chaîne est tous les espaces. Est-ce StringUtils attraper toutes les mêmes conditions que le premier?

Était-ce utile?

La solution

Oui, StringUtils.isBlank(..) fera la même chose, et est une meilleure façon d'aller. Jetez un oeil sur le code:

public static boolean isBlank(String str) {
     int strLen;
     if ((str == null) || ((strLen = str.length()) == 0))
         return true;
     int strLen;
     for (int i = 0; i < strLen; ++i) {
        if (!(Character.isWhitespace(str.charAt(i)))) {
           return false;
        }
     }
   return true;
}

Autres conseils

Vous avez raison le test d'expression régulière est si la chaîne est plus zéro ou plusieurs caractères blancs.

Les avantages de ne pas utiliser l'expression régulière

  • Les expressions régulières sont cryptique à beaucoup de gens, ce qui le rend moins lisible
  • Et comme vous l'avez justement signalé .matches() a une tête non trivial
 /**
 * Returns if the specified string is <code>null</code> or the empty string.
 * @param string the string
 * @return <code>true</code> if the specified string is <code>null</code> or the empty string, <code>false</code> otherwise
 */
public static boolean isEmptyOrNull(String string)
{
    return (null == string) || (0 >= string.length());
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top