2012-01-23 13 views
33

estoy pasando accountId como entrada desde un archivo XML, como se muestra, que será analizada más adelante y será utilizado en nuestro código:¿Podemos confiar en String.isEmpty para verificar la condición nula en una cadena en Java?

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

La cuestión es que si no se pasa (valor nulo en accoutnid) se pasa como accountid, no pude manejar esa situación en el código de Java. He intentado esto, pero no tuve éxito:

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

yo era capaz de manejar esto con éxito utilizando el siguiente enfoque:

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

¿Podemos confiar en el método String.isEmpty() para la comprobación de la condición nula de una String? Es esto valido?

Respuesta

85

No, en absoluto - porque si acct es nulo, ni siquiera llegar-isEmpty ... Será lanzar de inmediato una NullPointerException.

, la prueba debe ser:

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

Nota el uso de && aquí, en lugar de su || en el código anterior; También observe cómo en su código anterior, sus condiciones eran incorrectas de todos modos, incluso con &&, solo habría ingresado el cuerpo if si acctfuera una cadena vacía.

Por otra parte, el uso de Guava:

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

A algunos también les gusta esta versión del mismo cheque: '" ".equals (acct)' – AlexZam

+0

Hola, Jon, probé con un programa de ejemplo, String str = ""; System.out.println (str.isEmpty()); , aquí volvió verdadero, no lanzó NullPointerException.Entonces, ¿por qué no podemos usar isEmpty para verificar los valores nulos? ¿Podría aclarar esto? – Kiran

+0

@Kiran: Porque "" no es lo mismo que una referencia nula. Pruébalo con 'String str = null;' y * then * obtendrás 'NullPointerException'. Es muy importante comprender la diferencia entre una referencia de cadena que es nula y una referencia de cadena que hace referencia a una cadena vacía. –

6

No se puede utilizar String.isEmpty() si es nulo. Lo mejor es tener su propio método para verificar nulo o vacío.

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

Recomendaría usar StringUtils de commons-lang en lugar de escribir el suyo. – Vadim

+2

+1 No recomendaría agregar commons-lang a su proyecto (a menos que ya lo esté incluyendo) solo para un método tan simple. – leonbloy

+0

Al leer las respuestas anteriores, ¿qué tal '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 

tan nulo no es lo mismo que vacía.

espero que ayude !!!

+0

La pregunta no trata sobre si Nulo y vacío son los mismos. El OP en su lugar le pregunta si puede confiar en el método String isEmpty para comprobar si no tiene nulo. – NSNoob

11

Use StringUtils.isEmpty en su lugar, también buscará nulo.

ejemplos son:

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

Ver más en official Documentation on String Utils.

+0

Las respuestas del enlace solo se deben publicar como comentarios en su lugar – NSNoob

+3

, pero por lo tanto, necesito más reputación – lradacher

1

No, el método String.isEmpty() se ve de la siguiente manera:

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

como se puede ver que comprueba la longitud de la cadena por lo que definitivamente tiene que comprobar si la cadena es nula antes.

Cuestiones relacionadas