Compruebe si una cadena no es nula ni está vacía
¿ Cómo puedo comprobar si una cadena no está null
vacía o no?
public void doStuff(String str)
{
if (str != null && str != "**here I want to check the 'str' is empty or not**")
{
/* handle empty string */
}
/* ... */
}
¿ Qué pasa con isEmpty() ?
if(str != null && !str.isEmpty())
Asegúrese de utilizar las partes de &&
en este orden, porque Java no procederá a evaluar la segunda parte si la primera parte &&
falla, garantizando así que no obtendrá una excepción de puntero nulo str.isEmpty()
si str
es nulo.
Cuidado, sólo está disponible desde Java SE 1.6. Tienes que comprobar str.length() == 0
las versiones anteriores.
Para ignorar los espacios en blanco también:
if(str != null && !str.trim().isEmpty())
(dado que Java 11 str.trim().isEmpty()
se puede reducir a str.isBlank()
lo que también probará otros espacios en blanco Unicode)
Envuelto en una práctica función:
public static boolean empty( final String s ) {
// Null-safe, short-circuit evaluation.
return s == null || s.trim().isEmpty();
}
Se convierte en:
if( !empty( str ) )
Utilice org.apache.commons.lang.StringUtils
Me gusta usar Apache commons-lang para este tipo de cosas, y especialmente la clase de utilidad StringUtils :
import org.apache.commons.lang.StringUtils;
if (StringUtils.isNotBlank(str)) {
...
}
if (StringUtils.isBlank(str)) {
...
}
Simplemente agregando Android aquí:
import android.text.TextUtils;
if (!TextUtils.isEmpty(str)) {
...
}
Para agregar a @BJorn y @SeanPatrickFloyd La forma Guava de hacer esto es:
Strings.nullToEmpty(str).isEmpty();
// or
Strings.isNullOrEmpty(str);
Commons Lang es más legible a veces, pero poco a poco he ido confiando más en Guava y, a veces, Commons Lang es confuso cuando se trata isBlank()
(como en lo que son espacios en blanco o no).
La versión de Guava de Commons Lang isBlank
sería:
Strings.nullToEmpty(str).trim().isEmpty()
Diré que el código que no permite ""
(vacío) Y null
es sospechoso y potencialmente defectuoso porque probablemente no maneja todos los casos en los que no permitir null
tiene sentido (aunque para SQL puedo entender que SQL/HQL es extraño ''
).
str != null && str.length() != 0
alternativamente
str != null && !str.equals("")
o
str != null && !"".equals(str)
Nota: La segunda verificación (primera y segunda alternativa) supone que str no es nulo. ¡Está bien solo porque la primera verificación hace eso (y Java no realiza la segunda verificación si la primera es falsa)!
IMPORTANTE: NO use == para igualdad de cadenas. == comprueba que el puntero sea igual, no el valor. ¡Dos cadenas pueden estar en diferentes direcciones de memoria (dos instancias) pero tener el mismo valor!