Pregunta

Así que estoy buscando a través de algún código heredado y encontrando caso en que hacen esto:

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

Ignorar para el momento en que la llamada .matches(..) crea un nuevo patrón y cada vez Matcher (uhg) - pero ¿hay alguna razón para no cambiar esta línea a:

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

Estoy bastante seguro de la expresión regular, simplemente se refiere si la cadena es todo el espacio en blanco. Se StringUtils coger todos las mismas condiciones que la primera?

¿Fue útil?

Solución

Sí, StringUtils.isBlank(..) va a hacer la misma cosa, y es una mejor manera de ir. Echar un vistazo al código:

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;
}

Otros consejos

Tiene razón la prueba de expresión regular es si la cadena es más de cero o más caracteres de espacio en blanco.

Las ventajas de no usar la expresión regular

  • Las expresiones regulares son crípticos a muchas personas, lo que hace que sea menos legible
  • Y como bien ha señalado .matches() tiene una sobrecarga no 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());
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top