StringUtils.isBlank () vs String.isEmpty ()


215

Mi sono imbattuto in un codice che ha il seguente:

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

Questo sembra essere funzionalmente equivalente al seguente:

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

C'è una differenza tra i due ( org.apache.commons.lang3.StringUtils.isBlanke java.lang.String.isEmpty)?


7
Vale la pena ricordare che esiste anche un StringUtils.isEmpty(foo)metodo che ti aiuta a evitare i puntatori null, proprio come isBlank, ma non controlla i caratteri degli spazi bianchi.
Xavi,

Risposte:


380

StringUtils.isBlank()controlla che ogni carattere della stringa sia un carattere di spazio bianco (o che la stringa sia vuota o che sia nulla). Questo è totalmente diverso dal semplice controllo se la stringa è vuota.

Dalla documentazione collegata:

Verifica se una stringa è vuota, vuota ("") o nulla.

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

Per confronto StringUtils.isEmpty :

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

Avvertenza: in java.lang.String .isBlank () e java.lang.String .isEmpty () funzionano allo stesso modo, tranne per il fatto che non ritornano trueper null.

java.lang.String.isBlank()

java.lang.String.isEmpty()


135

La risposta accettata da @arshajii è totalmente corretta. Tuttavia, essendo solo più esplicito dicendo di seguito,

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() controllerà anche per null, mentre questo:

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

genererà un NullPointerExceptionif fooè nullo.


4
C'è una differenza più grande di quella; vedi la mia risposta.
Arshajii,

3
Questo non è corretto String.isEmpty () restituirà true se è null. Almeno se stai parlando della versione di apache.commons.lang. Non sono sicuro della versione di primavera.
ryoung

1
Il significato del mio commento è stato cancellato (per essere onesti avrebbe potuto essere più chiaro sin dall'inizio); Non stavo confrontando StringUtils.isBlank () con StringUtils.isEmpty () - piuttosto StringUtils.isBlank () con value.isEmpty () dell'OP
chut

1
la risposta di chut è corretta. Se java String foo è null, allora foo.isEmpty () genera NullPointerException. L'apache StringUtils.isBlank (foo) restituisce true anche se foo è null.
user2590805,

6

StringUtils.isBlankritorna anche truesolo per gli spazi bianchi:

isBlank (String str)

Verifica se una stringa è vuota, vuota ("") o nulla.


5

StringUtils.isBlank(foo)eseguirà un controllo nullo per te. Se esegui foo.isEmpty()ed fooè null, genererai una NullPointerException.


C'è una differenza più grande di quella; vedi la mia risposta.
Arshajii,

2

StringUtils.isBlank () restituisce true per gli spazi (solo spazi bianchi) e anche per la stringa null. In realtà, ritaglia le sequenze Char e quindi esegue il controllo.

StringUtils.isEmpty () restituisce true quando non vi è alcuna conseguenza nel parametro String o quando il parametro String è null. La differenza è che isEmpty () restituisce false se il parametro String contiene solo spazi interi. Considera gli spazi bianchi come uno stato di essere non vuoto.


2

L'unica differenza tra isBlank () e isEmpty () è:

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

Entrambi hanno lo stesso codice come isBlank gestirà gli spazi bianchi probabilmente intendevi isBlankString che ha il codice per gestire gli spazi bianchi.

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

Invece di usare lib di terze parti, usa 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

Sto rispondendo a questo perché è il risultato migliore in Google per "Metodo String isBlank ()".

Se si utilizza Java 11 o versioni successive, è possibile utilizzare il metodo isBlank () della classe String . Questo metodo fa la stessa cosa della classe StringUtils di Apache Commons.

Ho scritto un piccolo post sugli esempi di questo metodo, leggilo qui .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.