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)?

NSA
quelle
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()

arshajii
quelle
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
Nilesh
quelle
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.

chut
quelle
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.

Octavia Togami
quelle
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.

Standard
quelle
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.

user4555388
quelle
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
disha4mourya
quelle
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;
}
Apoorva Dhanvanthri
quelle
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
Ravthiru
quelle
-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 .

Pankaj
quelle