¿Cómo puedo verificar si una cadena no es nula y no está vacía?
public void doStuff(String str)
{
if (str != null && str != "**here I want to check the 'str' is empty or not**")
{
/* handle empty string */
}
/* ... */
}
java
string
string-comparison
Bernhard Barker
fuente
fuente
PreparedStatement
y tal en lugar de construir una consulta SQL mediante primitivas de concatenación de cadenas. Evita todo tipo de vulnerabilidades de inyección, mucho más fácil de leer, etc.Respuestas:
¿Qué pasa con isEmpty () ?
Asegúrese de usar las partes de
&&
en este orden, ya que Java no procederá a evaluar la segunda parte si la primera parte&&
falla, asegurando así que no obtendrá una excepción de puntero nulo destr.isEmpty()
sistr
es nulo.Cuidado, solo está disponible desde Java SE 1.6. Tienes que consultar
str.length() == 0
las versiones anteriores.Para ignorar también los espacios en blanco:
(ya que Java 11
str.trim().isEmpty()
puede reducirse,str.isBlank()
lo que también probará otros espacios en blanco Unicode)Envuelto en una práctica función:
Se convierte en:
fuente
isEmpty()
parece requerir una instancia de String (no estática). Invocar esto en una referencia nula arrojará una NullPointerException.TextUtils.isEmpty(String)
para verificar si la cadena está vacía o es nula. Agradable y corto. La clase TextUtils es parte del SDK de Android.(str != null && str.length() > 0)
.Use org.apache.commons.lang.StringUtils
Me gusta usar Apache commons-lang para este tipo de cosas, y especialmente la clase de utilidad StringUtils :
fuente
isEmpty
oisBlank
, tal vez no sea útil incluir una biblioteca de terceros. Simplemente puede crear su propia clase de utilidad para proporcionar dicho método. Sin embargo, como explica Bozho, ¡elcommons-lang
proyecto proporciona muchos métodos útiles!StringUtils.isNotBlank(str)
la comprobación nula también.Solo agrego Android aquí:
fuente
Para agregar a @BJorn y @SeanPatrickFloyd La forma en que Guava hace esto es:
Commons Lang es más legible a veces, pero poco a poco he estado confiando más en la guayaba y, a veces, Commons Lang es confuso cuando se trata de
isBlank()
(como en el espacio en blanco o no).La versión de Guava de Commons Lang
isBlank
sería:Diré que el código que no permite
""
(vacío) Ynull
es sospechoso y potencialmente defectuoso, ya que probablemente no maneja todos los casos en los que no está permitido tenernull
sentido (aunque para SQL puedo entender que SQL / HQL es extraño''
).fuente
alternativamente
o
Nota: La segunda verificación (primera y segunda alternativa) asume que str no es nulo. ¡Está bien solo porque la primera verificación está haciendo eso (y Java no hace la segunda verificación si la primera es falsa)!
IMPORTANTE: NO use == para la igualdad de cadena. == comprueba que el puntero es igual, no el valor. ¡Dos cadenas pueden estar en diferentes direcciones de memoria (dos instancias) pero tienen el mismo valor!
fuente
Casi todas las bibliotecas que conozco definen una clase de utilidad llamada
StringUtils
,StringUtil
oStringHelper
, y generalmente incluyen el método que está buscando.Mi favorito personal es Apache Commons / Lang , donde en la clase StringUtils , obtienes ambos(La primera verifica si una cadena es nula o vacía, la segunda verifica si es nula, vacía o solo en blanco)
Hay clases de utilidad similares en Spring, Wicket y muchas otras bibliotecas. Si no usa bibliotecas externas, es posible que desee introducir una clase StringUtils en su propio proyecto.Actualización: han pasado muchos años, y en estos días recomendaría usar el método de Guava
Strings.isNullOrEmpty(string)
.fuente
Esto funciona para mi:
fuente
Qué tal si:
fuente
&&
if str == null, evitando así una NullPointerException. (Fuente: acabo de probar)Utilice el método isNotBlank de Apache StringUtils como
Volverá verdadero solo si el str no es nulo y no está vacío.
fuente
Deberías usar
org.apache.commons.lang3.StringUtils.isNotBlank()
oorg.apache.commons.lang3.StringUtils.isNotEmpty
. La decisión entre estos dos se basa en lo que realmente desea verificar.Los isNotBlank () comprueba que el parámetro de entrada es:
El isNotEmpty () comprueba sólo que el parámetro de entrada es
fuente
Devuelve verdadero o falso según la entrada
fuente
Si no desea incluir toda la biblioteca; solo incluye el código que quieras de él. Tendrás que mantenerlo tú mismo; pero es una función bastante sencilla. Aquí se copia de commons.apache.org
fuente
Es un poco tarde, pero aquí hay un estilo funcional de verificación:
fuente
Hay un nuevo método en java-11:
String#isBlank
Esto podría combinarse
Optional
para verificar si la cadena es nula o está vacíaCadena # isBlank
fuente
prueba es igual a una cadena vacía y nula en el mismo condicional:
No lanza
NullPointerException
si str es nulo, ya queObject.equals()
devuelve falso si arg esnull
.la otra construcción
str.equals("")
arrojaría lo temidoNullPointerException
. Algunos podrían considerar una forma incorrecta usando un literal de cadena como el objeto sobre el cualequals()
se llama pero hace el trabajo.Compruebe también esta respuesta: https://stackoverflow.com/a/531825/1532705
fuente
str != null
.!"".equals(str)
ya hace el trabajoSolución simple :
fuente
Como Seanizer dijo anteriormente, Apache StringUtils es fantástico para esto, si incluyeses guayaba deberías hacer lo siguiente;
¿Puedo recomendar también que consulte las columnas en su conjunto de resultados por nombre en lugar de por índice, esto hará que su código sea mucho más fácil de mantener.
fuente
Hice mi propia función de utilidad para verificar varias cadenas a la vez, en lugar de tener una instrucción if llena de
if(str != null && !str.isEmpty && str2 != null && !str2.isEmpty)
. Esta es la función:así que simplemente puedo escribir:
fuente
areSet(String... strings)
luego se puede invocar sin la creación de la matriz:if(!StringUtils.areSet(firstName, lastName, address))
En caso de que esté utilizando Java 8 y desee tener un enfoque de Programación más funcional, puede definir uno
Function
que administre el control y luego puede reutilizarlo yapply()
cuando sea necesario.Al practicar, puedes definir
Function
comoLuego, puede usarlo simplemente llamando al
apply()
método como:Si lo prefiere, puede definir un
Function
que compruebe siString
está vacío y luego negarlo!
.En este caso,
Function
se verá así:Luego, puede usarlo simplemente llamando al
apply()
método como:fuente
Con Java 8 Opcional puedes hacer:
En esta expresión, manejarás
String
s que también consisten en espacios.fuente
Puede usar StringUtils.isEmpty (), resultará verdadero si la cadena es nula o vacía.
resultará en
str1 es nulo o está vacío
str2 es nulo o está vacío
fuente
isNotBlank
Aconsejaría a Guava o Apache Commons según su necesidad real. Verifique los diferentes comportamientos en mi código de ejemplo:
Resultado:
Apache:
a está en blanco
b está en blanco
c está en blanco
Google:
b es NullOrEmpty
c es NullOrEmpty
fuente
Si está utilizando Spring Boot, el siguiente código hará el trabajo
fuente
Para completar: si ya está utilizando Spring Framework , StringUtils proporciona el método
así como el método
fuente
Simplemente, para ignorar el espacio en blanco también:
fuente
Si usa Spring Framework, puede usar el método:
Este método acepta cualquier objeto como argumento, comparándolo con una cadena nula y vacía. Como consecuencia, este método nunca devolverá verdadero para un objeto no String no nulo.
fuente
StringUtils
estados explícitamente "Principalmente para uso interno dentro del marco; considere Apache's Commons Lang para un conjunto más completo de utilidades de cadena".La mejor manera de manejar nulo en la cadena es,
En breve,
fuente
Para verificar si todos los atributos de cadena en un objeto están vacíos (en lugar de usar! = Nulo en todos los nombres de campo siguiendo el enfoque de la API de reflexión de Java
Este método devolvería verdadero si todos los valores del campo String están en blanco, devolvería falso si alguno de los valores está presente en los atributos String
fuente
Me he encontrado con una situación en la que debo comprobar que "nulo" (como una cadena) debe considerarse vacío. También el espacio en blanco y un nulo real deben devolver verdadero. Finalmente me decidí por la siguiente función ...
fuente
En caso de que necesite validar los parámetros de su método, puede usar el método simple siguiente
Ejemplo:
fuente