我想获取字段的字符串值(它们可以是长字符串或任何对象的类型),
如果一个字段为空,那么它应该返回空字符串,我用番石榴做过;
nullToEmpty(String.valueOf(gearBox))
nullToEmpty(String.valueOf(id))
...
但是如果gearbox为null,则返回null!非空字符串,因为valueOf methdod返回字符串“ null”,这会导致错误。
有任何想法吗?
EDIt:有100多个字段,我正在寻找易于实现的字段
Answers:
可以使用Objects.toString()
(Java 7中的标准):
Objects.toString(gearBox, "")
Objects.toString(id, "")
从链接的文档中:
public static String toString(Object o, String nullDefault)
toString
如果第一个参数不为null,则返回调用第一个参数的结果,否则返回第二个参数。参数:
o
-一个对象
nullDefault
-如果第一个参数为null
返回:如果不是,则
调用toString
第一个参数,否则调用null
第二个参数。也可以看看:
toString(Object)
Objects.toString(id, "").trim()
对于Java 8,您可以使用Optional方法:
Optional.ofNullable(gearBox).orElse("");
Optional.ofNullable(id).orElse("");
gearBox == null ? "" : gearBox
。像这样的单个方法调用StringUtils.defaultString
更加JIT友好。
orElseGet
可以代替使用
orElseGet
一个代表,所以现在我有三个方法调用。第二,Optional
仍然创建对象然后将其丢弃。
如果您不介意使用Apache Commons,则可以使用Apache Commons StringUtils.defaultString(String str)
。
返回传入的String,或者如果String为null,则返回一个空的String(“”)。
如果您还想摆脱"null"
,可以执行以下操作:
StringUtils.defaultString(str).replaceAll("^null$", "")
或忽略大小写:
StringUtils.defaultString(str).replaceAll("^(?i)null$", "")
StringUtils.defaultString
已经检查为空。因此,replaceAll
仅当字符串是文字时才更改字符串"null"
,这不是要求的。来源:public static String defaultString(String str) { return str == null ? "" : str; }
"null"
使用内联null检查
gearBox == null ? "" : String.valueOf(gearBox);
在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, "")