Java 当为null时获取空字符串

Java 当为null时获取空字符串,java,guava,Java,Guava,我想获取字段的字符串值(它们可以是长字符串或任何对象的类型) 如果一个字段为空,那么它应该返回空字符串,我用番石榴做了这个 nullToEmpty(String.valueOf(gearBox)) nullToEmpty(String.valueOf(id)) ... 但如果变速箱为空,则返回空值!不是空字符串,因为valueOf methdod返回字符串“null”,这会导致错误 有什么想法吗 编辑:有100个字段,我在寻找易于实现的内容使用内联空检查 gearBox == null ? "

我想获取字段的字符串值(它们可以是长字符串或任何对象的类型)

如果一个字段为空,那么它应该返回空字符串,我用番石榴做了这个

nullToEmpty(String.valueOf(gearBox))
nullToEmpty(String.valueOf(id))
...
但如果变速箱为空,则返回空值!不是空字符串,因为valueOf methdod返回字符串“null”,这会导致错误

有什么想法吗


编辑:有100个字段,我在寻找易于实现的内容

使用内联空检查

gearBox == null ? "" : String.valueOf(gearBox);
您可以使用(Java 7中的标准):


从链接的文档中:

publicstaticstringtostring(objecto,stringnulldefault)

如果第一个参数不为null,则返回对第一个参数调用
toString
的结果,否则返回第二个参数

参数:
o
-对象
null默认值
-如果第一个参数为
null

返回:
如果第一个参数不是
null
,则调用
toString
,否则调用第二个参数的结果

另请参见:


如果您不介意使用ApacheCommons,他们有一个解决方案

返回传入的字符串,如果字符串为null,则返回空字符串(“”)

如果您还想删除
“null”
,可以执行以下操作:

StringUtils.defaultString(str).replaceAll("^null$", "")
或忽略以下情况:

StringUtils.defaultString(str).replaceAll("^(?i)null$", "")

因为你用的是番石榴:

Objects.firstNonNull(gearBox, "").toString();

对于java 8,您可以使用可选方法:

Optional.ofNullable(gearBox).orElse("");
Optional.ofNullable(id).orElse("");

如果选择另一种方式,Guava提供
Strings.nullToEmpty(String)

源代码

String str = null;
str = Strings.nullToEmpty(str);
System.out.println("String length : " + str.length());
结果

0

在Java 9+中使用:Objects.requireNonNullElse(obj,defaultObj)


StringUtils.defaultString(String str)
返回传入的字符串,或者如果字符串为null,则返回空字符串(“”)

来自javadoc的示例


StringUtils.defaultString(null)
将返回
“”

StringUtils.defaultString(“”
将返回
“”

StringUtils.defaultString(“bat”)
将返回
“bat”


两秒钟太快了@Samhain这里有100个字段,我在寻找一些易于实现的东西。如果字符串为字符串“null”,该怎么办?那是我的problem@Spring:已更新以处理该情况。
StringUtils.defaultString
已检查空值。因此,
replaceAll
只是当字符串是一个文本
“null”
时才改变,这不是要求的。下面是源代码:<代码>公共静态字符串Debug字符串(字符串STR){Retras= = null():“STR;} /Cord:>我相信第一个注释涉及字串“代码> > null”/Calp> @施普灵河,您应该考虑升级,特别是java 8即将推出。在任何情况下,我都会留下这个答案,以防对未来的访问者有所帮助。我想知道我的答案有什么问题,光是否决票并不能告诉我。我建议
Objects.toString(id,”).trim()
为什么需要>API19。。。这是一张简单的支票。我想我必须写下,我自己的风险是你失去了你的字符串类型。它当前是一个字符串,但如果将来它将更改为其他类型,编译器将不会保护您在配置文件图片中看到的UI?这不是Jon吗?在guava 18中,您需要使用
更多对象。firstNonNull
如果id不是字符串,第二行代码似乎无法工作。这会执行两个方法调用并分配一个新对象,然后立即丢弃它。这不是对简单的
齿轮箱==null的改进?“”:变速箱
。像
StringUtils.defaultString
这样的单个方法调用对JIT更为友好。@Vroo如果您不想放弃,则可以使用
orElseGet
instead@FedericoPiazza这不是一个进步。首先,
orElseGet
接受一个委托,所以现在我有三个方法调用。其次,仍然会创建一个
可选的
对象,然后将其丢弃。
0
//-- returns empty string if obj is null
Objects.requireNonNullElse (obj, "")