Je veux effectuer une action UNIQUEMENT SI ma chaîne a une valeur significative. Alors, j'ai essayé ça.
if (!myString.equals("")) {
doSomething
}
et ça
if (!myString.equals(null)) {
doSomething
}
et ça
if ( (!myString.equals("")) && (!myString.equals(null))) {
doSomething
}
et ça
if ( (!myString.equals("")) && (myString!=null)) {
doSomething
}
et ça
if ( myString.length()>0) {
doSomething
}
Et dans tous les cas mon programme doSomething
malgré le fait que ma chaîne EST VIDE. Cela équivaut à null
. Alors, qu'est-ce qui ne va pas avec ça?
AJOUTÉE:
J'ai trouvé la raison du problème. La variable a été déclarée sous forme de chaîne et, par conséquent, null
affectée à cette variable a été transformée en "null"
! Alors, ça if (!myString.equals("null"))
marche.
null
n'a aucune méthode, donc pas non plusequals()
. SimyString
c'était le casnull
, comment invoqueriez-vous une méthode dessus? :)System.out.println(myString)
immédiatement avant le bloc if afin que vous puissiez voir ce qu'il y a?null
"?null
attribué à cette variable a été transformé en"null"
- c'est une idée terrible. Essayez de changer cette conception si possible.Réponses:
Comme autre commentaire, vous devez être conscient de cette condition dans le
equals
contrat:De
Object.equals(Object)
:La façon de comparer avec
null
est d'utiliserx == null
etx != null
.De plus,
x.field
etx.method()
jetteNullPointerException
six == null
.la source
s.isEmpty()
au lieu des.length() == 0
pour la lisibilité. Toute différence de performance est négligeable. Je suis d'accord ques.equals("")
c'est terrible.Si
myString
c'est le casnull
, alors l'appelmyString.equals(null)
oumyString.equals("")
échouera avec unNullPointerException
. Vous ne pouvez appeler aucune méthode d'instance sur une variable nulle.Vérifiez d'abord null comme ceci:
Cela utilise une évaluation de court-circuit pour ne pas tenter le
.equals
simyString
échoue la vérification nulle.la source
.isEmpty()
place de.equals("")
.myString.isEmpty()
. Mais à ce niveau, la lisibilité l'emporte sur l'optimisation, et les gens pourraient être plus habitués à la lecturemyString.equals("")
. (Ou peut-être pas.)Apache commons
StringUtils.isNotEmpty
est la meilleure solution.la source
Si myString est en fait nul, tout appel à la référence échouera avec une exception de pointeur nul (NPE). Depuis java 6, utilisez #isEmpty au lieu de la vérification de la longueur (dans tous les cas, ne créez JAMAIS une nouvelle chaîne vide avec la vérification).
Incidemment, si la comparaison avec des littéraux String comme vous le faites, inverserait l'instruction afin de ne pas avoir à avoir une vérification nulle, c'est-à-dire,
au lieu de :
la source
TRAVAIL !!!!
la source
Vous devez vérifier que l'
myString
objet estnull
:la source
Si votre chaîne est null, les appels comme celui-ci devraient lever une NullReferenceException:
myString.equals (null)
Mais de toute façon, je pense qu'une méthode comme celle-ci est ce que vous voulez:
Ensuite, dans votre code, vous pouvez faire des choses comme ceci:
la source
Je vous encourage à utiliser un utilitaire existant ou à créer votre propre méthode:
Ensuite, utilisez-le quand vous en avez besoin:
Comme indiqué ci-dessus, le || et && court-circuit des opérateurs. Cela signifie que dès qu'ils peuvent déterminer leur valeur, ils s'arrêtent. Donc, si (string == null) est vrai, la partie longueur n'a pas besoin d'être évaluée, car l'expression serait toujours vraie. De même avec &&, où si le côté gauche est faux, l'expression est toujours fausse et n'a pas besoin d'être évaluée davantage.
De plus, utiliser length est généralement une meilleure idée que d'utiliser .equals. Les performances sont légèrement meilleures (pas beaucoup) et ne nécessitent pas de création d'objet (bien que la plupart des compilateurs puissent optimiser cela).
la source
Essayer,
la source
Incidemment, si vous faites beaucoup de manipulation de chaînes, il existe une excellente classe Spring avec toutes sortes de méthodes utiles:
http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/util/StringUtils.html
la source
Chaque fois que je dois gérer des chaînes (presque à chaque fois), je m'arrête et je me demande quel est vraiment le moyen le plus rapide de vérifier une chaîne vide. Bien sûr, le contrôle string.Length == 0 devrait être le plus rapide car Length est une propriété et il ne devrait y avoir aucun traitement autre que la récupération de la valeur de la propriété. Mais alors je me demande, pourquoi y a-t-il un String.Empty? Il devrait être plus rapide de vérifier String.Empty que longueur, me dis-je. Eh bien, j'ai finalement décidé de le tester. J'ai codé une petite application Windows Console qui me dit combien de temps il faut pour faire une certaine vérification pour 10 millions de répétitions. J'ai vérifié 3 chaînes différentes: une chaîne NULL, une chaîne vide et une chaîne "". J'ai utilisé 5 méthodes différentes: String.IsNullOrEmpty (), str == null, str == null || str == String.Empty, str == null || str == "", str == null || str.
Selon ces résultats, la vérification
str == null
est en moyenne la plus rapide, mais peut ne pas toujours donner ce que nous recherchons.if str = String.Empty
oustr = ""
, il en résulte faux. Ensuite, vous avez 2 qui sont à égalité à la deuxième place:String.IsNullOrEmpty()
etstr == null || str.length == 0
. CommeString.IsNullOrEmpty()
il est plus beau et plus facile (et plus rapide) à écrire, je recommanderais de l'utiliser par rapport à l'autre solution.la source
Je ferais quelque chose comme ça:
la source
J'utilisais
StringUtil.isBlank(string)
Il teste si une chaîne est vide: null, emtpy ou uniquement des espaces.
Donc celui-ci est le meilleur jusqu'à présent
Voici la méthode orignal de la documentation
la source
Cela devrait fonctionner:
Sinon, myString a probablement une valeur que vous n'attendez pas. Essayez de l'imprimer comme ceci:
L'utilisation des symboles '+' pour entourer la chaîne vous montrera s'il y a des espaces supplémentaires que vous ne tenez pas compte.
la source
if(str.isEmpty() || str==null){ do whatever you want }
la source
Ok, c'est ainsi que fonctionnent les types de données en Java. (Vous devez excuser mon anglais, je n'utilise probablement pas le bon vocabulaire. Vous devez différencier deux d'entre eux. Les types de données de base et les types de données normaux. Les types de données de base constituent à peu près tout ce qui existe. Par exemple, il sont tous des nombres, char, booléens, etc. Les types de données normaux ou les types de données complexes sont tout le reste Une chaîne est un tableau de caractères, donc un type de données complexe.
Chaque variable que vous créez est en fait un pointeur sur la valeur dans votre mémoire. Par exemple:
la variable "s" ne contient PAS de chaîne. C'est un indicateur. Ce pointeur pointe sur la variable dans votre mémoire. Lorsque vous appelez
System.out.println(anyObject)
, latoString()
méthode de cet objet est appelée. S'il n'a pas remplacétoString
Object, il imprimera le pointeur. Par exemple:Tout ce qui se trouve derrière le "@" est le pointeur. Cela ne fonctionne que pour les types de données complexes. Les types de données primitifs sont enregistrés DIRECTEMENT dans leur pointeur. Donc en fait, il n'y a pas de pointeur et les valeurs sont stockées directement.
Par exemple:
Je ne stocke PAS de pointeur dans ce cas. je vais stocker la valeur entière 123 (en octet ofc).
Bon alors revenons à l'
==
opérateur. Il compare toujours le pointeur et non le contenu enregistré à la position du pointeur dans la mémoire.Exemple:
Ces deux chaînes ont un pointeur différent. String.equals (String other) compare cependant le contenu. Vous pouvez comparer des types de données primitifs avec l'opérateur '==' car le pointeur de deux objets différents avec le même contenu est égal.
Null signifierait que le pointeur est vide. Un type de données primitif vide par défaut est 0 (pour les nombres). Null pour tout objet complexe signifie cependant que cet objet n'existe pas.
Salutations
la source
Pour moi, le meilleur contrôle si une chaîne a un contenu significatif en Java est celui-ci:
Vous vérifiez d'abord si la chaîne est
null
à éviterNullPointerException
, puis vous coupez tous les caractères d'espacement pour éviter de vérifier les chaînes qui n'ont que des espaces et enfin vous vérifiez si la chaîne coupée n'est pas vide, c'est-à-dire qu'elle a une longueur de 0.la source
J'ai eu ce problème sous Android et j'utilise de cette façon (Travaille pour moi):
Mais dans le code java, j'utilise:
Et :
la source
Je préfère utiliser:
Lisez StringUtils.isBlank () vs String.isEmpty () .
la source
Dans Android, vous pouvez vérifier cela avec la méthode utilitaire
isEmpty
deTextUtils
,isEmpty(CharSequence str)
méthode vérifie à la fois la condition, lanull
longueur et la longueurla source
J'utilise toujours comme ça:
ou vous pouvez copier ceci dans votre projet:
et appelez-le simplement comme:
il retournera vrai si est vide ou nul.
b=true
si est vide ou nulou vous pouvez utiliser try catch and catch quand il est nul.
la source
Je pense que myString n'est pas une chaîne mais un tableau de chaînes. Voici ce que tu dois faire:
la source
Vous pouvez vérifier la chaîne égale à null en utilisant ceci:
Si le résultat est 0 alors (Test + "") = "null".
la source
J'ai essayé la plupart des exemples donnés ci-dessus pour un null dans une application Android que je construisais et tout a échoué. J'ai donc trouvé une solution qui fonctionnait à tout moment pour moi.
Donc, concaténez simplement une chaîne vide comme je l'ai fait ci-dessus et testez "null" et cela fonctionne bien. En fait aucune exception n'est lancée
la source
L'exception peut également aider:
la source
Si vous travaillez sous Android, vous pouvez utiliser la classe TextUtils simple. Vérifiez le code suivant:
C'est une simple utilisation du code. La réponse peut être répétée. Mais il est simple d'avoir un chèque unique et simple pour vous.
la source
Vous devez vérifier avec null
if(str != null).
la source