Quiero realizar alguna acción SOLO SI mi cadena tiene un valor significativo. Entonces, intenté esto.
if (!myString.equals("")) {
doSomething
}
y esto
if (!myString.equals(null)) {
doSomething
}
y esto
if ( (!myString.equals("")) && (!myString.equals(null))) {
doSomething
}
y esto
if ( (!myString.equals("")) && (myString!=null)) {
doSomething
}
y esto
if ( myString.length()>0) {
doSomething
}
Y en todos los casos mi programa doSomething
a pesar del hecho de que mi cadena está VACÍA. Es igual a null
. Entonces, ¿qué hay de malo en eso?
ADICIONAL:
Encontré la razón del problema. La variable fue declarada como una cadena y, como consecuencia, null
asignada a esta variable se transformó en "null"
! Entonces, if (!myString.equals("null"))
funciona.
null
no tiene ningún método, así que tampocoequals()
. SimyString
fuera asínull
, ¿cómo invocarías un método? :)System.out.println(myString)
inmediatamente antes del bloque if para que pueda ver qué hay allí?null
"?null
asignado a esta variable se transformó en"null"
- esta es una idea terrible. Intenta cambiar este diseño si es posible.Respuestas:
Como comentario adicional, debe tener en cuenta este término en el
equals
contrato:De
Object.equals(Object)
:La forma de comparar
null
es usarx == null
yx != null
.Por otra parte,
x.field
yx.method()
tiraNullPointerException
six == null
.fuente
s.isEmpty()
lugar des.length() == 0
por legibilidad. Cualquier diferencia en el rendimiento es insignificante. Estoy de acuerdo en ques.equals("")
es terrible.Si
myString
es asínull
, entonces llamarmyString.equals(null)
omyString.equals("")
fallará con aNullPointerException
. No puede llamar a ningún método de instancia en una variable nula.Compruebe nulo primero así:
Esto hace uso de la evaluación de cortocircuito para no intentar
.equals
simyString
falla la verificación nula.fuente
.isEmpty()
lugar de.equals("")
.myString.isEmpty()
. Pero en este nivel, la legibilidad supera a la optimización, y las personas podrían estar más acostumbradas a la lecturamyString.equals("")
. (O posiblemente no.)Apache commons
StringUtils.isNotEmpty
es el mejor camino a seguir.fuente
Si myString es de hecho nulo, cualquier llamada a la referencia fallará con una excepción de puntero nulo (NPE). Desde java 6, use #isEmpty en lugar de la verificación de longitud (en cualquier caso, NUNCA cree una nueva cadena vacía con la verificación).
Por cierto, si se compara con los literales de cadena como lo hace, invertiría la declaración para no tener que tener una comprobación nula, es decir,
en vez de :
fuente
TRABAJANDO !!!!
fuente
Debe verificar que el
myString
objeto esnull
:fuente
Si su cadena es nula, las llamadas como esta deberían arrojar una NullReferenceException:
myString.equals (nulo)
Pero de todos modos, creo que un método como este es lo que quieres:
Luego, en su código, puede hacer cosas como esta:
fuente
Recomiendo usar una utilidad existente o crear su propio método:
Luego, úsalo cuando lo necesites:
Como se señaló anteriormente, el || y && operadores de corto circuito. Eso significa que tan pronto como puedan determinar su valor, se detienen. Entonces, si (string == null) es verdadero, no es necesario evaluar la parte de longitud, ya que la expresión siempre sería verdadera. Del mismo modo con &&, donde si el lado izquierdo es falso, la expresión siempre es falsa y no es necesario evaluarla más.
Como nota adicional, usar longitud es generalmente una mejor idea que usar .equals. El rendimiento es ligeramente mejor (no mucho) y no requiere la creación de objetos (aunque la mayoría de los compiladores pueden optimizar esto).
fuente
Tratar,
fuente
Incidentalmente, si está haciendo mucha manipulación de cadenas, hay una gran clase de Spring con todo tipo de métodos útiles:
http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/util/StringUtils.html
fuente
Cada vez que tengo que lidiar con cadenas (casi cada vez) me detengo y me pregunto cuál es realmente la forma más rápida de verificar si hay una cadena vacía. Por supuesto, la comprobación string.Length == 0 debería ser la más rápida ya que Length es una propiedad y no debería haber ningún otro procesamiento que no sea recuperar el valor de la propiedad. Pero luego me pregunto, ¿por qué hay una cadena vacía? Debería ser más rápido verificar String. Vacío que por longitud, me digo. Bueno, finalmente decidí probarlo. Codifiqué una pequeña aplicación de la Consola de Windows que me dice cuánto tiempo lleva hacer una determinada verificación de 10 millones de repeticiones. Verifiqué 3 cadenas diferentes: una cadena NULL, una cadena vacía y una cadena "". Utilicé 5 métodos diferentes: String.IsNullOrEmpty (), str == null, str == null || str == String.Empty, str == null || str == "", str == nulo || str.
De acuerdo con estos resultados, la verificación promedio
str == null
es la más rápida, pero puede que no siempre produzca lo que estamos buscando.if str = String.Empty
ostr = ""
da como resultado falso. Luego tienes 2 que están empatados en segundo lugar:String.IsNullOrEmpty()
ystr == null || str.length == 0
. Como seString.IsNullOrEmpty()
ve mejor y es más fácil (y más rápido) de escribir, recomendaría usarlo sobre la otra solución.fuente
Haría algo como esto:
fuente
He estado usando
StringUtil.isBlank(string)
Comprueba si una cadena está en blanco: nulo, vacío o solo espacio en blanco.
Este es el mejor hasta ahora.
Aquí está el método original de los documentos
fuente
Esto debería funcionar:
De lo contrario, es probable que myString tenga un valor que no espera. Intente imprimirlo así:
El uso de los símbolos '+' para rodear la cadena le mostrará si hay un espacio en blanco adicional que no está contando.
fuente
if(str.isEmpty() || str==null){ do whatever you want }
fuente
Bien, así es como funcionan los tipos de datos en Java. (Tienes que disculpar mi inglés, soy un problema. No estoy usando el vocabulario correcto. Debes diferenciar entre dos. Los tipos de datos básicos y los tipos de datos normales. Los tipos de datos básicos constituyen prácticamente todo lo que existe. Por ejemplo, hay son todos números, caracteres, booleanos, etc. Los tipos de datos normales o los tipos de datos complejos son todo lo demás. Una cadena es una matriz de caracteres, por lo tanto, un tipo de datos complejo.
Cada variable que crea es en realidad un puntero sobre el valor en su memoria. Por ejemplo:
la variable "s" NO contiene una cadena. Es un puntero. Este puntero apunta a la variable en su memoria. Cuando llamas
System.out.println(anyObject)
, se llama altoString()
método de ese objeto. Si no se anulatoString
desde Object, imprimirá el puntero. Por ejemplo:Todo detrás de la "@" es el puntero. Esto solo funciona para tipos de datos complejos. Los tipos de datos primitivos se guardan DIRECTAMENTE en su puntero. Entonces, en realidad no hay un puntero y los valores se almacenan directamente.
Por ejemplo:
NO almaceno un puntero en este caso. Guardaré el valor entero 123 (en byte ofc).
Bien, entonces volvamos al
==
operador. Siempre compara el puntero y no el contenido guardado en la posición del puntero en la memoria.Ejemplo:
Estas dos cadenas tienen un puntero diferente. Sin embargo, String.equals (String other) compara el contenido. Puede comparar tipos de datos primitivos con el operador '==' porque el puntero de dos objetos diferentes con el mismo contenido es igual.
Nulo significaría que el puntero está vacío. Un tipo de datos primitivo vacío por defecto es 0 (para números). Sin embargo, nulo para cualquier objeto complejo significa que ese objeto no existe.
Saludos
fuente
Para mí, la mejor comprobación si una cadena tiene algún contenido significativo en Java es esta:
Primero verifica si la cadena
null
debe evitarseNullPointerException
y luego recorta todos los caracteres de espacio para evitar verificar cadenas que solo tienen espacios en blanco y finalmente verifica si la cadena recortada no está vacía, es decir, tiene una longitud 0.fuente
Tuve este problema en Android y lo uso de esta manera (Trabaja para mí):
Pero en el código Java uso:
Y:
fuente
Prefiero usar:
Lea StringUtils.isBlank () vs String.isEmpty () .
fuente
En Android puede verificar esto con el método de utilidad
isEmpty
desdeTextUtils
,isEmpty(CharSequence str)
El método verifica tanto la condición,null
como la longitud.fuente
Yo siempre uso así:
o puedes copiar esto a tu proyecto:
y solo llámalo así:
devolverá verdadero si está vacío o nulo.
b=true
si está vacío o nuloo puede usar try catch and catch cuando es nulo.
fuente
Creo que myString no es una cadena sino una matriz de cadenas. Aquí está lo que tú necesitas hacer:
fuente
Puede verificar una cadena igual a nula usando esto:
Si el resultado es 0, entonces (Prueba + "") = "nulo".
fuente
Intenté la mayoría de los ejemplos dados anteriormente para un nulo en una aplicación de Android que estaba construyendo y TODO FALLÓ. Entonces se me ocurrió una solución que funcionó en cualquier momento para mí.
Así que simplemente concatene una cadena vacía como lo hice anteriormente y pruebe contra "nulo" y funciona bien. De hecho, no se lanza ninguna excepción
fuente
La excepción también puede ayudar:
fuente
Si está trabajando en Android, puede usar la clase TextUtils simple. Verifique el siguiente código:
Este es un uso simple del código. La respuesta puede repetirse. Pero es simple tener un cheque simple y simple para usted.
fuente
Tienes que consultar con nulo
if(str != null).
fuente