0
votes

Comment définir la valeur null si la chaîne est vide?

Parfois les développeurs vérifie si Strings sont valeurs null , si oui, définit ces chaînes comme valeur vide: xxx

ce que je veux à faire est d'écrire en face si déclaration: xxx

mais ... Tout d'abord - je dois vérifier (comme généralement) si cette chaîne est null pour éviter NullpointerException, donc maintenant, il ressemble à ceci (très moche mais baiser): xxx

Ma classe a plusieurs champs de cordes et pour tous, je dois préparer cette solution. Des idées de base pour un code plus efficace? Est-ce un bon moyen de le scrocher à des expressions Lambda et d'itérer tous les champs de chaîne de cette classe?


5 commentaires

Pourquoi voudriez-vous le faire opposé à l'utilisation de en option ? Pourquoi ne pas essayer d'éliminer NULL en tant que facteur, opposé à une valeur pondérée?


fusionner dans l'extérieur si. Ou écrire un stringutil.notnullandempty (texte) méthode


Où avez-vous obtenu text.equals (null) de? Cette expression est toujours fausse ou jette une NPE.


Avez-vous envisagé d'utiliser Kotlin? Si (Texte? .Isempty ()! = NULL) , et vous pouvez même ajouter des méthodes à la classe de chaîne, telles que String # TODISPLAY () .


@Vinceemigh j'ai besoin de livrer null si vide


6 Réponses :


3
votes

Je ne connais pas le contexte dans lequel vous pensiez mentionner des flux relatifs à votre question, mais si vous êtes ouvert à la bibliothèque Apache Stringutils, une option serait d'utiliser le Stringutils # ISPTY () Méthode:

if (StringUtils.isEmpty(text)) {
    text = null;
}


3 commentaires

Juste une opinion, mais en utilisant une bibliothèque tierce partie pour une telle tâche minuscule n'est qu'un déchet.


@nullpoinger en fait, peut-être que Java devrait inclure de telles méthodes directement dans la catégorie string , qui éliminerait le besoin de bibliothèques tiers. Je conviens que de nombreux cas d'utilisation sont probablement limites.


@TimbieGeleisen Java a inclus des méthodes, en particulier avec les dernières versions. Cependant, surtout ces méthodes Apache avec leur manutention NULL sont une étape dans la mauvaise direction. Les développeurs doivent éviter null au lieu d'utiliser ces méthodes utilitaires.



1
votes

Vous pouvez faire la même chose en utilisant une instruction IF comme ci-dessous,

    if (text != null && text.isEmpty()) {
        text = null;
    }


3 commentaires

util complet peut éventuellement être string privé checkeemptyandnull (String Text) {si (texte! = null && text.Impty ()) {texte = null; } renvoyer le texte; }


texte.equals (null) est toujours false et causera une NPE si texte est null . Il suffit d'écrire texte! = Null (mais op a la même erreur)


Je voulais juste dire qu'il peut obtenir la même chose en utilisant une instruction IF et manquez le texte text.equals (null) partie. Ma faute



1
votes

n'utilise pas égaux () code> Pour vérifier si une chaîne est null code>, mais: xxx pré>

SO P>

if (text != null && text.isEmpty()) {
    text = null;
}


0 commentaires

3
votes

Dans votre exemple, si le texte est null, alors texte.equals (null) provoquera une NPE. Vous voudrez quelque chose comme ceci:

public static String setNullOnEmpty(final String text) {
    return text != null && text.trim().isEmpty() ? null : text;
}


2 commentaires

Vous avez oublié d'insérer l'instruction renvoyer dans votre méthode. En tant que note latérale, commençant par JDK 11, vous pouvez utiliser text.isblank () au lieu de texte.trim (). ISPTY () .


Bonne prise, merci. Je passe entre Groovy et Java ces derniers temps et Groovy n'exige pas de retour.



1
votes

Je n'ai pas une meilleure réponse à votre problème exact que ce qui a déjà été posté. Cependant, je voudrais faire preuve de questions fortement pourquoi vous voudriez confondre des cordes vides et des nulls dans les nulls. Les nulls sont généralement une mauvaise idée, une "erreur milliard dollar", pour citer Tony Hoare, qui a lui-même inventé des références nulles. Ce blog post A quelques bons arguments!

Avez-vous envisagé d'aller dans la direction opposée, convertissant toutes les cordes NULL aux cordes vides? De cette façon, il vous suffit de traiter des chaînes pour la plupart de votre code et d'arrêter de vous inquiéter des exceptions de pointeur Null.

Mieux encore, jetez un coup d'œil sur le type facultatif, qui représente un objet qui peut être présent ou non. Cela a eu lieu à Java 8 comme un meilleur moyen de représenter l'absence que les nulls. Voici un Publication du blog qui l'explique.


0 commentaires

3
votes

Une autre alternative utilisant GUAVA's PTTLONULL :

text = Strings.emptyToNull(text);


0 commentaires