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, "")