我想获取我的字段的字符串值(它们可以是长字符串或任何对象的类型),
如果一个字段为null,那么它应该返回空字符串,我用guava做了这个;
nullToEmpty(String.valueOf(gearBox))
nullToEmpty(String.valueOf(id))
...
但是如果变速箱为空,则返回null!不是空字符串,因为valueOf methdod返回字符串“null”,这会导致错误。
有任何想法吗?
EDIt:有100个字段我寻找易于实现的东西
您可以使用Objects.toString()
(Java 7中的标准):
Objects.toString(gearBox, "")
Objects.toString(id, "")
从链接的文档:
public static String toString(Object o, String nullDefault)
如果第一个参数不为null,则返回在第一个参数上调用
toString
的结果,否则返回第二个参数。参数:
o
- 一个对象nullDefault
- 如果第一个参数是null
,则返回字符串返回: 如果它不是
toString
而在第一个参数上调用null
的结果,否则调用第二个参数。也可以看看:
toString(Object)
对于java 8,您可以使用Optional方法:
Optional.ofNullable(gearBox).orElse("");
Optional.ofNullable(id).orElse("");
如果你不介意使用Apache公共,他们有一个StringUtils.defaultString(String str)
这样做。
返回传入的String,如果String为null,则返回空String(“”)。
如果你也想摆脱"null"
,你可以这样做:
StringUtils.defaultString(str).replaceAll("^null$", "")
或忽略大小写:
StringUtils.defaultString(str).replaceAll("^(?i)null$", "")
使用内联null检查
gearBox == null ? "" : String.valueOf(gearBox);
既然你正在使用番石榴:
Objects.firstNonNull(gearBox, "").toString();
如果替代方式,番石榴提供Strings.nullToEmpty(String)
。
源代码
String str = null;
str = Strings.nullToEmpty(str);
System.out.println("String length : " + str.length());
结果
0
所有版本的最佳解决方案就是这个明显的例子:
实施方法
// 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;
}
使用:
str(yourString);