Comment puis-je vérifier si une chaîne n'est pas nulle et non vide?
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
la source
la source
PreparedStatement
and such au lieu de construire une requête SQL par des primitives de concaténation de chaînes. Évite toutes sortes de vulnérabilités d'injection, beaucoup plus lisibles, etc.Réponses:
Et isEmpty () ?
Assurez-vous d'utiliser les parties de
&&
dans cet ordre, car java ne procédera pas à l'évaluation de la deuxième partie si la première partie de&&
échoue, vous garantissant ainsi que vous n'obtiendrez pas d'exception de pointeur nulstr.isEmpty()
si ifstr
est nul.Attention, il n'est disponible que depuis Java SE 1.6. Vous devez vérifier
str.length() == 0
les versions précédentes.Pour ignorer également les espaces:
(puisque Java 11
str.trim().isEmpty()
peut être réduit,str.isBlank()
ce qui permettra également de tester d'autres espaces blancs Unicode)Enveloppé dans une fonction pratique:
Devient:
la source
isEmpty()
semble nécessiter une instance de chaîne (non statique). L'invocation de ceci sur une référence null lèvera une NullPointerException.TextUtils.isEmpty(String)
pour vérifier si la chaîne est vide ou nulle. Agréable et court. La classe TextUtils fait partie du SDK Android.(str != null && str.length() > 0)
.Utilisez org.apache.commons.lang.StringUtils
J'aime utiliser Apache commons-lang pour ce genre de choses, et en particulier la classe utilitaire StringUtils :
la source
isEmpty
ouisBlank
, il n'est peut-être pas utile d'inclure une bibliothèque tierce. Vous pouvez simplement créer votre propre classe d'utilitaires pour fournir une telle méthode. Cependant, comme l'explique Bozho, lecommons-lang
projet propose de nombreuses méthodes utiles!StringUtils.isNotBlank(str)
que la vérification nulle aussi.Il suffit d'ajouter Android ici:
la source
Pour ajouter à @BJorn et @SeanPatrickFloyd La manière Guava de le faire est la suivante:
Commons Lang est parfois plus lisible, mais je me fie lentement à Guava et parfois Commons Lang est déroutant en ce qui concerne
isBlank()
(comme dans les espaces blancs ou non).La version de Guava de Commons Lang
isBlank
serait:Je dirai du code qui n'autorise pas
""
(vide) ETnull
est suspect et potentiellement bogué en ce qu'il ne gère probablement pas tous les cas où l'null
interdiction est logique (bien que pour SQL, je peux comprendre que SQL / HQL est bizarre''
).la source
alternativement
ou
Remarque: La deuxième vérification (première et deuxième alternatives) suppose que str n'est pas nul. C'est ok seulement parce que la première vérification fait ça (et Java ne fait pas la deuxième vérification si la première est fausse)!
IMPORTANT: N'UTILISEZ PAS == pour l'égalité des chaînes. == vérifie que le pointeur est égal, pas la valeur. Deux chaînes peuvent être dans des adresses mémoire différentes (deux instances) mais ont la même valeur!
la source
Presque toutes les bibliothèques que je connais définissent une classe utilitaire appelée
StringUtils
,StringUtil
ouStringHelper
, et elles incluent généralement la méthode que vous recherchez.Mon préféré est Apache Commons / Lang , où dans la classe StringUtils , vous obtenez à la fois le(Le premier vérifie si une chaîne est nulle ou vide, le second vérifie si elle est nulle, vide ou blanc uniquement)
Il existe des classes utilitaires similaires dans Spring, Wicket et de nombreuses autres bibliothèques. Si vous n'utilisez pas de bibliothèques externes, vous souhaiterez peut-être introduire une classe StringUtils dans votre propre projet.Mise à jour: de nombreuses années se sont écoulées et ces jours-ci, je recommanderais d'utiliser la méthode de Guava
Strings.isNullOrEmpty(string)
.la source
Cela fonctionne pour moi:
la source
Que diriez-vous:
la source
&&
if str == null, empêchant ainsi une NullPointerException. (Source: je viens d'essayer)Utilisez la méthode isNotBlank d'Apache StringUtils comme
Il ne retournera vrai que si la chaîne n'est pas nulle et n'est pas vide.
la source
Vous devez utiliser
org.apache.commons.lang3.StringUtils.isNotBlank()
ouorg.apache.commons.lang3.StringUtils.isNotEmpty
. La décision entre ces deux est basée sur ce que vous voulez réellement vérifier.Les isNotBlank () vérifie que le paramètre d'entrée est:
Le isNotEmpty () vérifie seulement que le paramètre d'entrée est
la source
Renvoie vrai ou faux en fonction de l'entrée
la source
Si vous ne voulez pas inclure la bibliothèque entière; il suffit d'inclure le code que vous souhaitez en tirer. Vous devrez l'entretenir vous-même; mais c'est une fonction assez simple. Ici, il est copié depuis commons.apache.org
la source
C'est un peu trop tard, mais voici un style fonctionnel de vérification:
la source
Il existe une nouvelle méthode java-11:
String#isBlank
Cela pourrait être combiné avec
Optional
pour vérifier si la chaîne est nulle ou videString # isBlank
la source
test est égal à une chaîne vide et null dans le même conditionnel:
Ne lance pas
NullPointerException
si str est nul, carObject.equals()
renvoie faux si arg l'estnull
.l'autre construction
str.equals("")
jetterait le redoutéNullPointerException
. Certains pourraient considérer une mauvaise forme en utilisant un littéral de chaîne comme objet sur lequelequals()
est appelé, mais il fait le travail.Vérifiez également cette réponse: https://stackoverflow.com/a/531825/1532705
la source
str != null
.!"".equals(str)
font déjà le travailSolution simple:
la source
Comme l'a dit seanizer ci-dessus, Apache StringUtils est fantastique pour cela, si vous deviez inclure la goyave, vous devriez faire ce qui suit;
Puis-je également vous recommander de vous référer aux colonnes de votre jeu de résultats par nom plutôt que par index, cela rendra votre code beaucoup plus facile à maintenir.
la source
J'ai créé ma propre fonction utilitaire pour vérifier plusieurs chaînes à la fois, plutôt que d'avoir une instruction if pleine de
if(str != null && !str.isEmpty && str2 != null && !str2.isEmpty)
. Voici la fonction:donc je peux simplement écrire:
la source
areSet(String... strings)
peut alors être invoqué sans la création du tableau:if(!StringUtils.areSet(firstName, lastName, address))
Dans le cas où vous utilisez Java 8 et souhaitez avoir une approche de programmation plus fonctionnelle, vous pouvez définir un
Function
qui gère le contrôle, puis vous pouvez le réutiliser etapply()
chaque fois que cela est nécessaire.En venant à la pratique, vous pouvez définir le
Function
commeEnsuite, vous pouvez l'utiliser en appelant simplement la
apply()
méthode comme:Si vous préférez, vous pouvez définir un
Function
qui vérifie si leString
est vide, puis le nier avec!
.Dans ce cas, le
Function
ressemblera à:Ensuite, vous pouvez l'utiliser en appelant simplement la
apply()
méthode comme:la source
Avec Java 8 en option, vous pouvez faire:
Dans cette expression, vous gérerez également les
String
s composés d'espaces.la source
Vous pouvez utiliser StringUtils.isEmpty (), il en résultera vrai si la chaîne est nulle ou vide.
aura pour résultat
str1 est nul ou vide
str2 est nul ou vide
la source
isNotBlank
Je conseillerais Guava ou Apache Commons en fonction de vos besoins réels. Vérifiez les différents comportements dans mon exemple de code:
Résultat:
Apache:
a est vide
b est vide
c est vide
Google:
b est NullOrEmpty
c est NullOrEmpty
la source
Si vous utilisez Spring Boot, le code ci-dessous fera le travail
la source
Pour être complet: si vous utilisez déjà le framework Spring , les StringUtils fournissent la méthode
ainsi que la méthode
la source
Pour ignorer également les espaces blancs:
la source
Si vous utilisez le framework Spring, vous pouvez utiliser la méthode:
Cette méthode accepte tout objet comme argument, en le comparant à null et à la chaîne vide. Par conséquent, cette méthode ne retournera jamais true pour un objet non-null non-String.
la source
StringUtils
explicitement indique "Principalement pour un usage interne dans le cadre; considérez le Langage commun d'Apache pour une suite plus complète d'utilitaires String."La meilleure façon de gérer null dans la chaîne est,
En bref,
la source
Pour vérifier si tous les attributs de chaîne d'un objet sont vides (au lieu d'utiliser! = Null sur tous les noms de champ suivant l'approche api de réflexion java
Cette méthode renverrait true si toutes les valeurs de champ String sont vides, elle retournerait false si une valeur est présente dans les attributs String
la source
J'ai rencontré une situation où je dois vérifier que "null" (en tant que chaîne) doit être considéré comme vide. De plus, un espace blanc et un nul réel doivent renvoyer true. J'ai finalement choisi la fonction suivante ...
la source
Si vous devez valider les paramètres de votre méthode, vous pouvez utiliser la méthode simple suivante
Exemple:
la source