44 votes

StringBuilder append() et les valeurs nulles

J'ai une liste de Strings, et je veux les concaténer avec des espaces entre eux. Donc j'utilise StringBuilder. Maintenant, si l'un des Strings est null, il est stocké littéralement dans le StringBuilder comme 'null'. Voici un petit programme pour illustrer le problème :

public static void main(String ss[]) {
    StringBuilder sb = new StringBuilder();

    String s;
    s = null;

    System.out.println(sb.append("Valeur : ").append(s));
}

Je m'attendrais à ce que la sortie soit "Valeur : " mais elle sort comme "Valeur : null"

Y a-t-il un moyen de contourner ce problème ?

4voto

Benas Points 576
import java.util.Objects;
...
sb.append(Objects.toString(s, ""));

Utilise les outils internes de Java, aucune bibliothèque externe n'est nécessaire. toString prend une chaîne de caractères, vérifie si elle est null et si c'est le cas, renvoie la valeur par défaut spécifiée, dans ce cas "" (chaîne vide), si ce n'est pas null, il renvoie la chaîne fournie.

0voto

Dominik Points 886

Pour mon objectif, j'ai dû généraliser un peu la Réponse n°2. Voici la même fonction, prenant un Object comme argument, au lieu d'une String :

private String nullToEmpty(Object obj) {
    return obj == null ? "" : obj.toString();
}

0voto

marcel Points 2354

J'ai combiné la réponse de geeksforgeeks.org et de @Benas.

map = map.entrySet()
    .stream()
    .peek(entry -> entry.setValue(Objects.toString(entry.getValue(), "")))
    .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

Objects from java.utils.

-1voto

posdef Points 2740

La vérification de la nullité, comme @Shynthriir l'a mentionné, est la manière la plus simple et la plus efficace (à ma connaissance) de contourner le problème.

Cependant, je recommande fortement d'initialiser les chaînes de caractères à une chaîne vide String str = ""; au lieu de cela, ce qui vous évitera bien des maux de tête lors d'un effort de programmation plus complexe.

-1voto

Rizki Akerkaou Points 1

Vous pouvez faire :

sb.Replace("= ,", "= null,");

ou :

sb.append("Valeur : ").append((s != null)? s: "NULL");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X