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


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


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


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.


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.


5

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


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.


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

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

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

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.