Comment puis-je vérifier une chaîne contre null en java? j'utilise
stringname.equalsignorecase(null)
mais ça ne marche pas.
string == null
compare si l'objet est null. string.equals("foo")
compare la valeur à l'intérieur de cet objet. string == "foo"
ne fonctionne pas toujours, car vous essayez de voir si les objets sont les mêmes et non les valeurs qu'ils représentent.
Réponse plus longue:
Si vous essayez ceci, cela ne fonctionnera pas, comme vous l'avez constaté:
String foo = null;
if (foo.equals(null)) {
// That fails every time.
}
La raison est que foo est null, donc il ne sait pas ce que .equals est; il n'y a pas d'objet pour que .equals soit appelé.
Ce que tu voulais probablement, c'était:
String foo = null;
if (foo == null) {
// That will work.
}
Le moyen typique de se prémunir contre un null lorsqu'il s'agit de chaînes est:
String foo = null;
String bar = "Some string";
...
if (foo != null && foo.equals(bar)) {
// Do something here.
}
De cette façon, si foo était nul, il n'évaluait pas la seconde moitié du conditionnel, et tout allait bien.
Le moyen le plus simple, si vous utilisez un littéral String (au lieu d'une variable), est le suivant:
String foo = null;
...
if ("some String".equals(foo)) {
// Do something here.
}
Si vous voulez contourner ce problème, Apache Commons a une classe - StringUtils - qui fournit des opérations de chaîne null-safe.
if (StringUtils.equals(foo, bar)) {
// Do something here.
}
Une autre réponse était une blague, et a dit que vous devriez faire ceci:
boolean isNull = false;
try {
stringname.equalsIgnoreCase(null);
} catch (NullPointerException npe) {
isNull = true;
}
S'il vous plaît ne faites pas ça. Vous ne devriez lancer que des exceptions pour les erreurs exceptionnelles; si vous attendez un null, vous devriez le vérifier à l'avance et ne pas le laisser lever l'exception.
Dans ma tête, il y a deux raisons à cela. Premièrement, les exceptions sont lentes. la vérification contre null est rapide, mais lorsque la JVM lève une exception, cela prend beaucoup de temps. Deuxièmement, le code est beaucoup plus facile à lire et à maintenir si vous recherchez simplement le pointeur null à l’avance.
s == null
ne fonctionnera pas?
Bien sûr ça marche. Vous manquez une partie essentielle du code. Vous avez juste besoin de faire comme ça:
boolean isNull = false;
try {
stringname.equalsIgnoreCase(null);
} catch (NullPointerException npe) {
isNull = true;
}
;)
Utilisez la méthode TextUtils.
TextUtils.isEmpty (str) : Renvoie vrai si la chaîne est nulle ou égale à 0. Paramètres: str la chaîne à examiner Retour: true si str est null ou de longueur nulle
if(TextUtils.isEmpty(str)) {
// str is null or lenght is 0
}
Ci-dessous, code source de cette méthode
/**
* Returns true if the string is null or 0-length.
* @param str the string to be examined
* @return true if str is null or zero length
*/
public static boolean isEmpty(CharSequence str) {
if (str == null || str.length() == 0)
return true;
else
return false;
}
Si nous regardons l'implémentation de la méthode equalsIgnoreCase, nous trouvons cette partie:
if (string == null || count != string.count) {
return false;
}
Donc, il retournera toujours false
si l'argument est null
. Et c'est évidemment vrai, car le seul cas où il devrait retourner true
est le moment où equalsIgnoreCase a été appelé sur un null String
, mais
String nullString = null;
nullString.equalsIgnoreCase(null);
entraînera certainement une exception NullPointerException.
Les méthodes equals ne sont donc pas conçues pour tester si un objet est null, simplement parce que vous ne pouvez pas les invoquer sur null
.
Cela semble un peu étrange, mais ...
stringName == null || "".equals(stringName)
Cela n'a jamais posé de problème, de plus, c'est un moyen plus sûr de vérifier tout en évitant les éventuelles exceptions de points nuls.
Je ne suis pas sûr de ce qui n'allait pas avec la réponse du MYYN.
if (yourString != null) {
//do fun stuff with yourString here
}
Le chèque nul ci-dessus est tout à fait correct.
Si vous essayez de vérifier si une référence de chaîne est égale (en ignorant la casse) à une autre chaîne que vous savez n'est pas une référence nulle, procédez comme suit:
String x = "this is not a null reference"
if (x.equalsIgnoreCase(yourStringReferenceThatMightBeNull) ) {
//do fun stuff
}
En cas de doute sur le fait de savoir si vous avez ou non des références nulles pour les deux chaînes que vous comparez, vous devez rechercher une référence nulle sur au moins l'une d'entre elles pour éviter la possibilité d'une exception NullPointerException.
Si votre chaîne a une valeur "null", vous pouvez utiliser
if(null == stringName){
[code]
}
else
[Error Msg]
importez-le dans votre classe
import org.Apache.commons.lang.StringUtils;
puis l'utiliser, ils retourneront tous les deux
System.out.println(StringUtils.isEmpty(""));
System.out.println(StringUtils.isEmpty(null));
Vous pouvez vérifier avec String == null
Ça marche pour moi
String foo = null;
if(foo == null){
System.out.println("String is null");
}
Méthode simple:
public static boolean isBlank(String value) {
return (value == null || value.equals("") || value.equals("null") || value.trim().equals(""));
}
Naturellement, user351809, stringname.equalsignorecase(null)
lancera une exception NullPointerException.
Vous voyez, vous avez un objet chaîne stringname
, qui remplit 2 conditions possibles: -
stringname
a une valeur de chaîne non nulle (disons "ordinateur"):"computer".equalsignorecase(null)
false
.stringname
a une valeur null
:null.equalsignorecase(null)
true
,null
n'est pas un objet pouvant exécuter la méthode equalsignorecase()
.Par conséquent, vous obtenez l'exception en raison du cas 2.
Je vous suggère simplement d’utiliser stringname == null
Si le value
renvoyé est null, utilisez:
if(value.isEmpty());
Parfois, pour vérifier null, if(value == null)
en Java, il se peut que la valeur true ne soit pas donnée, même si String est null.
Avec Java 7, vous pouvez utiliser
if (Objects.equals(foo, null)) {
...
}
qui retournera true
si les deux paramètres sont null
.
Je sais que cela a été répondu il y a longtemps, mais je n'ai pas vu cela posté, alors j'ai pensé partager ce que je fais. Ce n'est pas particulièrement bon pour la lisibilité du code, mais si vous devez faire une série de vérifications nulles, j'aime bien utiliser:
String someString = someObject.getProperty() == null ? "" : someObject.getProperty().trim();
Dans cet exemple, trim est appelé sur la chaîne, ce qui jetterait un NPE si la chaîne était null ou des espaces, mais sur la même ligne, vous pouvez rechercher la valeur null ou blank afin de ne pas vous retrouver avec une tonne de (plus ) difficile à formater si les blocs.