Frage

Also habe ich durch einige Legacy-Code suchen und zu finden, beispielsweise, wo sie dies tun:

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

Ignorieren für den Moment, dass der .matches(..) Aufruf erzeugt ein neues Muster und Matcher jedes Mal (UHG) - aber ist es aus irgendeinem Grunde nicht diese Zeile zu ändern:

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

Ich bin ziemlich sicher, dass der Regex paßt einfach, wenn die Zeichenfolge alle Leerzeichen sind. Wird StringUtils alle die gleichen Bedingungen wie die erste fangen?

War es hilfreich?

Lösung

Ja, StringUtils.isBlank(..) wird das gleiche tun, und ist ein besserer Weg zu gehen. Werfen Sie einen Blick auf den 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;
}

Andere Tipps

Sie sind richtig mit dem regulären Ausdruck Test ist, wenn die Zeichenfolge mehr null oder mehr Leerzeichen sind.

Die Vorteile der nicht den regulären Ausdruck mit

  • Reguläre Ausdrücke sind kryptisch viele Menschen, das macht es weniger lesbar
  • Und wie Sie zu Recht darauf hingewiesen, .matches() hat einen nicht trivialen Kopf
 /**
 * 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());
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top