StringUtils.isBlank () vs String.isEmpty ()


215

Ich bin auf einen Code gestoßen, der Folgendes enthält:

String foo = getvalue("foo");
if (StringUtils.isBlank(foo))
    doStuff();
else
    doOtherStuff();

Dies scheint funktional dem Folgenden zu entsprechen:

String foo = getvalue("foo");
if (foo.isEmpty())
    doStuff();
else
    doOtherStuff();

Ist ein Unterschied zwischen den beiden ( org.apache.commons.lang3.StringUtils.isBlankund java.lang.String.isEmpty)?


7
Erwähnenswert ist, dass es auch eine gibt, mit StringUtils.isEmpty(foo)der Sie Nullzeiger vermeiden können isBlank, aber nicht nach Leerzeichen suchen.
Xavi

Antworten:


380

StringUtils.isBlank()prüft, ob jedes Zeichen der Zeichenfolge ein Leerzeichen ist (oder ob die Zeichenfolge leer oder null ist). Dies ist völlig anders als nur zu überprüfen, ob die Zeichenfolge leer ist.

Aus der verlinkten Dokumentation:

Überprüft, ob ein String Leerzeichen, leer ("") oder null ist.

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

Zum Vergleich StringUtils.isEmpty :

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

Warnung: In java.lang.String funktionieren .isBlank () und java.lang.String .isEmpty () gleich, außer dass sie nicht truefür zurückkehren null.

java.lang.String.isBlank()

java.lang.String.isEmpty()


135

Die akzeptierte Antwort von @arshajii ist völlig korrekt. Seien Sie jedoch expliziter, indem Sie unten sagen:

StringUtils.isBlank ()

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

StringUtils.isEmpty

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


14

StringUtils.isBlank() wird auch auf null prüfen, während dies:

String foo = getvalue("foo");
if (foo.isEmpty())

wird ein NullPointerExceptionif werfen fooist null.


4
Es gibt einen größeren Unterschied als das; siehe meine Antwort.
Arshajii

3
Das ist falsch. String.isEmpty () gibt true zurück, wenn es null ist. Zumindest wenn Sie über die Version apache.commons.lang sprechen. Bei der Spring-Version bin ich mir nicht sicher.
Ryoung

1
Die Bedeutung meines Kommentars wurde entfernt (um fair zu sein, hätte es von Anfang an klarer sein können); Ich habe StringUtils.isBlank () nicht mit StringUtils.isEmpty () verglichen - sondern StringUtils.isBlank () mit dem Wert des OP.isEmpty ()
chut

1
Die Antwort von chut ist richtig. Wenn der Java-String foo null ist, löst foo.isEmpty () eine NullPointerException aus. Der Apache StringUtils.isBlank (foo) gibt true zurück, auch wenn foo null ist.
user2590805

6

StringUtils.isBlankgibt auch truenur für Leerzeichen zurück:

isBlank (String str)

Überprüft, ob ein String Leerzeichen, leer ("") oder null ist.


5

StringUtils.isBlank(foo)führt eine Nullprüfung für Sie durch. Wenn Sie ausführen foo.isEmpty()und foonull ist, wird eine NullPointerException ausgelöst.


Es gibt einen größeren Unterschied als das; siehe meine Antwort.
Arshajii

2

StringUtils.isBlank () gibt true für Leerzeichen (nur Leerzeichen) und auch für null String zurück. Tatsächlich werden die Char-Sequenzen abgeschnitten und dann eine Überprüfung durchgeführt.

StringUtils.isEmpty () gibt true zurück, wenn der String-Parameter keine Zeichenfolge enthält oder wenn der String-Parameter null ist. Der Unterschied besteht darin, dass isEmpty () false zurückgibt, wenn der String-Parameter nur Leerzeichen enthält. Es betrachtet Leerzeichen als einen Zustand, in dem es nicht leer ist.


2

Der einzige Unterschied zwischen isBlank () und isEmpty () ist:

StringUtils.isBlank(" ")       = true //compared string value has space and considered as blank

StringUtils.isEmpty(" ")       = false //compared string value has space and not considered as empty

1
public static boolean isEmpty(String ptext) {
 return ptext == null || ptext.trim().length() == 0;
}

public static boolean isBlank(String ptext) {
 return ptext == null || ptext.trim().length() == 0;
}

Beide haben den gleichen Code, wie isBlank mit Leerzeichen umgehen soll. Wahrscheinlich haben Sie damit gemeint, dass isBlankString den Code für die Behandlung von Leerzeichen enthält.

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

1

Verwenden Sie anstelle von lib von Drittanbietern Java 11 isBlank ()

    String str1 = "";
    String str2 = "   ";
    Character ch = '\u0020';
    String str3 =ch+" "+ch;

    System.out.println(str1.isEmpty()); //true
    System.out.println(str2.isEmpty()); //false
    System.out.println(str3.isEmpty()); //false            

    System.out.println(str1.isBlank()); //true
    System.out.println(str2.isBlank()); //true
    System.out.println(str3.isBlank()); //true

-2

Ich beantworte dies, weil es das beste Ergebnis in Google für "String isBlank () Method" ist.

Wenn Sie Java 11 oder höher verwenden, können Sie die String-Klasse isBlank () verwenden. -Methode verwenden. Diese Methode macht dasselbe wie die Apache Commons StringUtils-Klasse.

Ich habe einen kleinen Beitrag zu diesen Methodenbeispielen geschrieben, lesen Sie ihn hier .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.