null时获取空字符串

问题描述 投票:30回答:7

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

如果一个字段为null,那么它应该返回空字符串,我用guava做了这个;

nullToEmpty(String.valueOf(gearBox))
nullToEmpty(String.valueOf(id))
...

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

有任何想法吗?

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

java guava
7个回答
105
投票

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

Objects.toString(gearBox, "")

Objects.toString(id, "")

从链接的文档:

public static String toString(Object o, String nullDefault)

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

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

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

也可以看看: toString(Object)


26
投票

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

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

20
投票

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

返回传入的String,如果String为null,则返回空String(“”)。

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

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

或忽略大小写:

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

7
投票

使用内联null检查

gearBox == null ? "" : String.valueOf(gearBox);

6
投票

既然你正在使用番石榴:

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

2
投票

如果替代方式,番石榴提供Strings.nullToEmpty(String)

源代码

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

结果

0

0
投票

所有版本的最佳解决方案就是这个明显的例子:

实施方法

// 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);
© www.soinside.com 2019 - 2024. All rights reserved.