2012-01-23 11 views
33

sto passando un accountid come input da un file XML, come illustrato, che verranno analizzati in seguito e sarà utilizzato nel nostro codice:Possiamo fare affidamento su String.isEmpty per verificare la condizione nulla su una stringa in Java?

<accountid>123456</accountid> 
<user>pavan</user> 

Il problema è che se non viene passato (valore nullo in accoutnid) è passato come accountid, non sono riuscito a gestire quella situazione nel codice Java. Ho provato questo ma non ero riuscita:

if (acct != null||acct==""||acct.equals("")) 
{ 
    // the above is not working 
} 

ero in grado di gestire questo successo utilizzando il seguente approccio:

if(!acct.isEmpty()) 
{ 
    // thisis working 
} 

Possiamo contare sul metodo String.isEmpty() per la verifica della condizione di zero di un String? È valido?

risposta

85

No, assolutamente no - perché se acct è nullo, non sarà nemmeno arrivare-isEmpty ... sarà immediatamente lanciare una NullPointerException.

Il test dovrebbe essere:

if (acct != null && !acct.isEmpty()) 

Nota l'uso di && qui, piuttosto che il vostro || nel codice precedente; nota anche come nel tuo codice precedente, le tue condizioni erano comunque sbagliate - anche con && avresti inserito solo il corpo if se acctera una stringa vuota.

In alternativa, utilizzando Guava:

if (!Strings.isNullOrEmpty(acct)) 
+1

Ad alcuni piace anche questa versione dello stesso controllo: '" ".equals (acct)' – AlexZam

+0

Ciao Jon, ho provato con un programma di esempio, String str = ""; System.out.println (str.isEmpty()); , qui è tornato vero, non ha lanciato NullPointerException.quindi perché non possiamo usare isEmpty per il controllo dei valori Null ?? Potresti per favore chiarire questo ?? – Kiran

+0

@ Kiran: Perché "" non è lo stesso di un riferimento null. Provalo con 'String str = null;' e * then * riceverai un 'NullPointerException'. È molto importante capire la differenza tra un riferimento di stringa che è null e un riferimento di stringa che fa riferimento a una stringa vuota. –

6

Non è possibile utilizzare String.isEmpty() se è nullo. La cosa migliore è avere il tuo metodo per controllare nullo o vuoto.

public static boolean isBlankOrNull(String str) { 
    return (str == null || "".equals(str.trim())); 
} 
+6

Vorrei raccomandare l'uso di StringUtils da commons-lang invece di scrivere il proprio. – Vadim

+2

+1 Non raccomanderei di aggiungere commons-lang al progetto (a meno che non lo stiate già includendo) solo per un metodo così semplice. – leonbloy

+0

Leggendo le risposte precedenti, che ne dite di 'str == null || str.trim(). isEmpty() '? –

0
String s1=""; // empty string assigned to s1 , s1 has length 0, it holds a value of no length string 

String s2=null; // absolutely nothing, it holds no value, you are not assigning any value to s2 

quindi nullo non è lo stesso come vuoto.

speranza che aiuti !!!

+0

La domanda non riguarda se Null e empty sono uguali. L'OP sta invece chiedendo se può fare affidamento su String isEmpty per verificare la presenza di null. – NSNoob

11

Utilizzare invece StringUtils.isEmpty, anche per verificare null.

Esempi sono:

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

Vedere anche sulla official Documentation on String Utils.

+0

Le risposte al solo collegamento devono essere inviate come commenti invece – NSNoob

+3

ma, di conseguenza, ho bisogno di più reputazione – lradacher

1

No, il metodo String.isEmpty() appare come segue:

public boolean isEmpty() { 
    return this.value.length == 0; 
} 

come si può vedere che controlla la lunghezza della stringa in modo da avere assolutamente per verificare se la stringa è null prima.

Problemi correlati