Ich möchte Zeichenfolgenwerte meiner Felder abrufen (sie können vom Typ einer langen Zeichenfolge oder eines beliebigen Objekts sein).
Wenn ein Feld null ist, sollte es eine leere Zeichenfolge zurückgeben. Ich habe dies mit Guave gemacht.
nullToEmpty(String.valueOf(gearBox))
nullToEmpty(String.valueOf(id))
...
Dies gibt jedoch null zurück, wenn das Getriebe null ist! Keine leere Zeichenfolge, da valueOf methdod die Zeichenfolge "null" zurückgibt, was zu Fehlern führt.
Irgendwelche Ideen?
EDIt: Es gibt 100 Felder, in denen ich nach etwas suche, das einfach zu implementieren ist
Objects.toString(id, "").trim()
Für Java 8 können Sie den optionalen Ansatz verwenden:
Optional.ofNullable(gearBox).orElse(""); Optional.ofNullable(id).orElse("");
quelle
gearBox == null ? "" : gearBox
. Ein einzelner Methodenaufruf wieStringUtils.defaultString
ist JIT-freundlicher.orElseGet
kann der stattdessen verwendet werdenorElseGet
nimmt einen Delegierten so jetzt habe ich drei Methodenaufrufe. Zweitens wird immer noch einOptional
Objekt erstellt und dann verworfen.Wenn es Ihnen nichts ausmacht, Apache Commons zu verwenden, haben sie eine
StringUtils.defaultString(String str)
, die dies tut.Wenn Sie auch loswerden möchten
"null"
, können Sie tun:StringUtils.defaultString(str).replaceAll("^null$", "")
oder um den Fall zu ignorieren:
StringUtils.defaultString(str).replaceAll("^(?i)null$", "")
quelle
StringUtils.defaultString
prüft bereits auf null. So die sichreplaceAll
ändert , ist nur die Zeichenfolge ist , wenn es sich um eine wörtliche ist"null"
, das , was wurde nicht gefragt. Hier ist die Quelle:public static String defaultString(String str) { return str == null ? "" : str; }
"null"
Wenn alternativ, bietet Guava
Strings.nullToEmpty(String)
.Quellcode
String str = null; str = Strings.nullToEmpty(str); System.out.println("String length : " + str.length());
Ergebnis
0
quelle
Verwenden Sie eine Inline-Nullprüfung
gearBox == null ? "" : String.valueOf(gearBox);
quelle
Da Sie Guave verwenden:
Objects.firstNonNull(gearBox, "").toString();
quelle
MoreObjects.firstNonNull
Verwenden Sie in Java 9+: Objects.requireNonNullElse (obj, defaultObj) https://docs.oracle.com/javase/9/docs/api/java/util/Objects.html#requireNonNullElse-TT-
//-- returns empty string if obj is null Objects.requireNonNullElse (obj, "")
quelle