StringUtils.isBlank () vs String.isEmpty ()

215

Natknąłem się na kod, który ma następujące:

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

Wydaje się to funkcjonalnie równoważne z następującymi:

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

Czy jest różnica między tymi dwoma ( org.apache.commons.lang3.StringUtils.isBlanki java.lang.String.isEmpty)?

NSA
źródło
7
Warto wspomnieć, że istnieje również taki, StringUtils.isEmpty(foo)który pomaga uniknąć wskaźników zerowych isBlank, ale nie sprawdza znaków białych znaków.
Xavi

Odpowiedzi:

380

StringUtils.isBlank()sprawdza, czy każdy znak łańcucha jest znakiem spacji (lub czy łańcuch jest pusty lub czy ma wartość zerową). Jest to zupełnie inne niż sprawdzanie, czy łańcuch jest pusty.

Z powiązanej dokumentacji:

Sprawdza, czy ciąg znaków jest spacją, pusty („”) lub pusty.

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

Dla porównania StringUtils.isEmpty :

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

Ostrzeżenie: W java.lang.String .isBlank () i java.lang.String .isEmpty () działa tak samo z wyjątkiem oni nie zwracają truena null.

java.lang.String.isBlank()

java.lang.String.isEmpty()

arshajii
źródło
135

Akceptowana odpowiedź z @arshajii jest całkowicie poprawna. Jednak mówiąc wprost, mówiąc poniżej,

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
źródło
14

StringUtils.isBlank() sprawdzi również, czy nie ma wartości null, podczas gdy:

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

wyrzuci NullPointerExceptionif foojest zerowy.

chut
źródło
4
Jest większa różnica niż to; zobacz moją odpowiedź.
arshajii
3
To jest niepoprawne. String.isEmpty () zwróci true, jeśli ma wartość null. Przynajmniej jeśli mówisz o wersji apache.commons.lang. Nie jestem pewien co do wersji wiosennej.
ryoung
1
Znaczenie mojego komentarza zostało zredagowane (szczerze mówiąc, od samego początku mogło być bardziej jasne); Nie porównywałem StringUtils.isBlank () z StringUtils.isEmpty () - raczej StringUtils.isBlank () z wartością OP.isEmpty ()
chut
1
odpowiedź Chut jest poprawna. Jeśli java String foo ma wartość NULL, to foo.isEmpty () zgłasza wyjątek NullPointerException. Apache StringUtils.isBlank (foo) zwraca wartość true, nawet jeśli foo ma wartość NULL.
user2590805
6

StringUtils.isBlankzwraca również truepo prostu białe znaki:

isBlank (String str)

Sprawdza, czy ciąg znaków jest spacją, pusty („”) lub pusty.

Octavia Togami
źródło
5

StringUtils.isBlank(foo)wykona za Ciebie kontrolę zerową. Jeśli wykonasz foo.isEmpty()i fooma wartość NULL, podniesiesz wyjątek NullPointerException.

Domyślna
źródło
Jest większa różnica niż to; zobacz moją odpowiedź.
arshajii
2

StringUtils.isBlank () zwraca wartość true zarówno dla pustych znaków (tylko białych znaków), jak i dla pustych ciągów. W rzeczywistości przycina sekwencje Char, a następnie wykonuje sprawdzenie.

StringUtils.isEmpty () zwraca true, gdy nie ma ciągów znaków w parametrze String lub gdy parametr String ma wartość null. Różnica polega na tym, że isEmpty () zwraca false, jeśli parametr String zawiera tylko spacje. Uważa, że ​​białe znaki są stanem niepustym.

użytkownik4555388
źródło
2

Jedyna różnica między isBlank () i isEmpty () to:

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
źródło
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;
}

Oba mają ten sam kod, w jaki sposób isBlank będzie obsługiwał białe znaki, prawdopodobnie miałeś na myśli, że isBlankString ma kod do obsługi białych znaków.

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
źródło
1

Zamiast używać biblioteki innej firmy, użyj 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
źródło
-2

Odpowiadam na to pytanie, ponieważ jest to najlepszy wynik w Google dla „String isBlank () Method”.

Jeśli używasz języka Java 11 lub nowszego , możesz użyć metody klasy String isBlank () . Ta metoda działa tak samo, jak klasa StringUtils Apache Commons.

Napisałem mały post na temat przykładów tej metody, przeczytaj go tutaj .

Pankaj
źródło