Je veux obtenir les valeurs de chaîne de mes champs (ils peuvent être de type chaîne longue ou n'importe quel objet),
si field est null alors qu'il devrait renvoyer une chaîne vide, je l'ai fait avec goyave;
nullToEmpty(String.valueOf(gearBox))
nullToEmpty(String.valueOf(id))
...
Mais ceci retourne null si gearbox est null! chaîne non vide car valueOf methdod renvoie la chaîne "null", ce qui entraîne des erreurs.
Des idées?
EDIt: il y a une centaine de champs que je recherche facilement.
Pour Java 8, vous pouvez utiliser l'approche facultative:
Optional.ofNullable(gearBox).orElse("");
Optional.ofNullable(id).orElse("");
Si cela ne vous dérange pas d'utiliser Apache commons, ils ont un StringUtils.defaultString(String str)
qui le fait.
Retourne soit la chaîne passée, soit une chaîne vide ("") si la chaîne est nulle.
Si vous voulez aussi vous débarrasser de "null"
, vous pouvez faire:
StringUtils.defaultString(str).replaceAll("^null$", "")
ou pour ignorer le cas:
StringUtils.defaultString(str).replaceAll("^(?i)null$", "")
Utiliser un contrôle null en ligne
gearBox == null ? "" : String.valueOf(gearBox);
Puisque vous utilisez de la goyave:
Objects.firstNonNull(gearBox, "").toString();
Si autre moyen, Goyave fournit Strings.nullToEmpty(String)
.
Code source
String str = null;
str = Strings.nullToEmpty(str);
System.out.println("String length : " + str.length());
Résultat
0
La meilleure solution pour toutes les versions est cet exemple clair:
Méthode de mise en œuvre
// object to Object string
public static Object str(Object value) {
if (value == null) {
value = new String();
}
return value;
}
// Object to String
public static String str(Object value) {
if (value == null) {
value = new String();
}
return value.toString();
}
// String to String (without nulls)
public String str(String value) {
if (value == null) {
value = new String();
}
return value;
}
Utilisation:
str(yourString);