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);