【问题标题】:Get empty string when null为空时获取空字符串
【发布时间】:2014-03-23 02:09:33
【问题描述】:

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

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

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

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

有什么想法吗?

编辑:有 100 个字段我正在寻找易于实现的东西

【问题讨论】:

    标签: java guava


    【解决方案1】:

    您可以使用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)

    【讨论】:

    • @Spring 您应该考虑升级,尤其是 Java 8 即将推出。无论如何,我会留下这个答案,以防它对未来的访问者有所帮助。
    • 反对者:请发表评论。我想知道我的回答有什么问题,单靠反对票并不能告诉我。
    • 不错。我建议Objects.toString(id, "").trim()
    • 为什么需要> API 19...这是一个简单的检查。我想我必须写下我自己
    • 风险在于您丢失了字符串的类型。它目前是一个字符串,但如果将来它会更改为不同的类型,他的编译器将不会保护你
    【解决方案2】:

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

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

    【讨论】:

    • 如果id不是字符串,好像第二行代码不行
    • 这会进行两次方法调用并分配一个新对象并立即丢弃它。这不是对简单的gearBox == null ? "" : gearBox 的改进。像StringUtils.defaultString 这样的单个方法调用对 JIT 更友好。
    • @Vroo 如果您不想丢弃,则可以使用 orElseGet 代替
    • @FedericoPiazza 这不是改进。首先,orElseGet 接受一个委托,所以现在我有 三个 方法调用。其次,Optional 对象仍然会被创建然后被丢弃。
    【解决方案3】:

    如果您不介意使用 Apache commons,他们有一个 StringUtils.defaultString(String str) 可以做到这一点。

    返回传入的字符串,或者如果字符串为空,则返回一个空字符串 ("")。

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

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

    或忽略大小写:

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

    【讨论】:

    • 如果字符串是字符串“null”怎么办?那是我的问题
    • @Spring:已更新以处理这种情况。
    • StringUtils.defaultString 已经检查了空值。所以replaceAll 只是在字符串是文字"null" 时更改字符串,这不是所要求的。来源:public static String defaultString(String str) { return str == null ? "" : str; }
    • 我相信第一条评论涉及文字字符串"null"
    【解决方案4】:

    如果是其他方式,Guava 提供Strings.nullToEmpty(String)

    源代码

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

    结果

    0
    

    【讨论】:

      【解决方案5】:

      使用内联空值检查

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

      【讨论】:

      • 两秒太快了!
      • @Samhain 有 100 个字段我正在寻找易于实现的东西
      【解决方案6】:

      因为你使用的是番石榴:

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

      【讨论】:

      • 你的头像里有你吗?那不是乔恩吗?
      • 从番石榴18你需要使用MoreObjects.firstNonNull
      【解决方案7】:

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

      来自 java 文档的示例

      StringUtils.defaultString(null) 将返回 "" StringUtils.defaultString("") 将返回 "" StringUtils.defaultString("bat") 将返回 "bat"

      【讨论】:

        【解决方案8】:

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

        //-- returns empty string if obj is null
        Objects.requireNonNullElse (obj, "")   
        

        【讨论】:

          猜你喜欢
          • 2020-03-24
          • 1970-01-01
          • 2018-10-09
          • 2021-07-10
          • 2011-11-30
          • 2020-10-01
          • 2012-02-01
          • 2014-11-12
          • 2014-06-04
          相关资源
          最近更新 更多