null时获取空字符串
我想获取我的字段的字符串值(它们可以是长字符串或任何对象的类型),
如果field为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
,则返回的字符串返回:
如果第一个参数不为null
,则调用toString
的结果,否则调用第二个参数。也可以看看:
toString(Object)
如果您不介意使用Apache commons,它们会有一个StringUtils.defaultString(String str)
来执行此操作。
返回传入的String,如果String为null,则返回空String(“”)。
如果你还想摆脱"null"
,你可以这样做:
StringUtils.defaultString(str).replaceAll("^null$", "")
或忽略大小写:
StringUtils.defaultString(str).replaceAll("^(?i)null$", "")
对于java 8,您可以使用Optional方法:
Optional.ofNullable(gearBox).orElse(""); Optional.ofNullable(id).orElse("");
使用内联null检查
gearBox == null ? "" : String.valueOf(gearBox);
因为你正在使用番石榴:
Objects.firstNonNull(gearBox, "").toString();
如果是替代方式, Guava提供了Strings.nullToEmpty(String)
。
源代码
String str = null; str = Strings.nullToEmpty(str); System.out.println("String length : " + str.length());
结果
0
我选择的所有解决方案都已发布。 所以在这种特殊情况下,如果真的有100个这些陈述需要改变,你可以考虑一个坏的和肮脏的解决方案:
编写自己的String
类,返回""
为null
。 使用您自己的String
实现,您不必更改现有代码(可能添加import
)。 但这真的是一个糟糕的解决方案……我只是想提一下;-)
就个人而言,我会使用搜索和替换,并与其他任何答案。
所有版本的最佳解决方案就是这个明显的例子:
实施方法
// 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);