2014-05-02 8 views
96

mi sono imbattuto in un codice che ha il seguente:StringUtils.isBlank() vs String.isEmpty()

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

Questo sembra essere funzionalmente equivalente alla seguente:

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

È un differenza tra i due (org.apache.commons.lang3.StringUtils.isBlank e java.lang.String.isEmpty)?

+5

potrebbe essere la pena ricordare che c'è anche un [ 'StringUtils.isEmpty (foo) '] (https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringUtils.html#isEmpty (java.lang.String)) che ti aiuta ad evitare puntatori nulli, proprio come 'isBlank', ma non controlla i caratteri di spaziatura. – Xavi

risposta

157

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

Dalla documentazione collegata:

Verifica se una stringa è spazio bianco, vuoto ("") o nullo.

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

StringUtils.isBlank() sarà anche verificare la presenza di nulla, che questo:

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

lancerà una NullPointerException se foo è nullo.

+3

C'è una differenza più grande di quella; guarda la mia risposta – arshajii

+1

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

+1

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

2

StringUtils.isBlank(foo) eseguirà un assegno nulla per te. Se esegui foo.isEmpty() e foo è nullo, genererai una NullPointerException.

+0

C'è una differenza più grande di quella; guarda la mia risposta – arshajii

4

StringUtils.isBlank restituisce anche true solo spazi bianchi:

ISBLANK (String str)

Verifica se una stringa è spazio bianco, vuoto ("") o nullo.

1

StringUtils.isBlank() restituisce vero per spazi (solo spazi bianchi) e per String null pure . In realtà taglia le sequenze Char e quindi esegue il controllo.

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

0
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 sarà ISBLANK gestire gli spazi bianchi probabilmente significava isBlankString questo ha il codice per la gestione di 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; 
} 
37

La risposta accettata da @arshajii è completamente corretta. Tuttavia solo di essere 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 
Problemi correlati