null时获取空字符串

Spr*_*ing 43 java guava

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

如果field为null而不是返回空字符串,我用guava做了这个;

nullToEmpty(String.valueOf(gearBox))
nullToEmpty(String.valueOf(id))
...
Run Code Online (Sandbox Code Playgroud)

但是如果变速箱为空,则返回null!不是空字符串,因为valueOf methdod返回字符串"null",这会导致错误.

有任何想法吗?

EDIt:有100个字段我寻找易于实现的东西

ars*_*jii 113

您可以使用Objects.toString()(Java 7中的标准):

Objects.toString(gearBox, "")

Objects.toString(id, "")
Run Code Online (Sandbox Code Playgroud)

从链接的文档:

public static String toString(Object o, String nullDefault)

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

参数:
o - 一个对象
nullDefault- 如果第一个参数是,则返回null

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

也可以看看:
toString(Object)

  • Downvoter:请发表评论.我想知道我的答案有什么问题,而且单独的一个downvote并没有告诉我. (2认同)
  • 风险是你会丢失字符串的类型。它目前是一个字符串,但如果将来它会更改为其他类型,则编译器将不会保护您 (2认同)

Fed*_*zza 33

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

Optional.ofNullable(gearBox).orElse("");
Optional.ofNullable(id).orElse("");
Run Code Online (Sandbox Code Playgroud)

  • 如果id不是字符串,似乎第二行代码无法工作 (2认同)
  • 这会执行两次方法调用并分配一个新对象并立即丢弃它。这不是对简单的 `gearBox == null 的改进吗?“”:齿轮箱`。像“StringUtils.defaultString”这样的单一方法调用更加 JIT 友好。 (2认同)

Kep*_*pil 20

如果你不介意使用Apache公共,他们有一个StringUtils.defaultString(String str)这样做.

返回传入的String,如果String为null,则返回空String("").

如果你也想摆脱"null",你可以这样做:

StringUtils.defaultString(str).replaceAll("^null$", "")
Run Code Online (Sandbox Code Playgroud)

或忽略大小写:

StringUtils.defaultString(str).replaceAll("^(?i)null$", "")
Run Code Online (Sandbox Code Playgroud)


Won*_*Kim 14

如果替代方式,Guava提供Strings.nullToEmpty(String).

源代码

String str = null;
str = Strings.nullToEmpty(str);
System.out.println("String length : " + str.length());
Run Code Online (Sandbox Code Playgroud)

结果

0
Run Code Online (Sandbox Code Playgroud)


小智 12

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

java 文档中的示例

StringUtils.defaultString(null) 会回来"" StringUtils.defaultString("") 会回来"" StringUtils.defaultString("bat")会回来"bat"


Sam*_*ain 7

使用内联null检查

gearBox == null ? "" : String.valueOf(gearBox);
Run Code Online (Sandbox Code Playgroud)


ren*_*nke 6

既然你正在使用番石榴:

Objects.firstNonNull(gearBox, "").toString();
Run Code Online (Sandbox Code Playgroud)


Ari*_*ngh 6

在 Java 9+ 中使用:Objects.requireNonNullElse (obj, defaultObj) https://docs.oracle.com/javase/9​​/docs/api/java/util/Objects.html#requireNonNullElse-TT-

//-- returns empty string if obj is null
Objects.requireNonNullElse (obj, "")   
Run Code Online (Sandbox Code Playgroud)