当前位置:  开发笔记 > 编程语言 > 正文

StringBuilder追加()和null值

如何解决《StringBuilder追加()和null值》经验,为你挑选了4个好方法。

我有一个Strings 列表,我想用它们之间的空格连接起来.所以我正在使用StringBuilder.现在,如果有任何Strings null,它们将被StringBuilder字面上存储为"null".这是一个小程序来说明问题:

public static void main(String ss[]) {
    StringBuilder sb = new StringBuilder();

    String s;
    s = null;

    System.out.println(sb.append("Value: ").append(s));
}

我希望输出为"Value:",但它出现为"Value:null"

有没有解决这个问题的方法?



1> Anthony..:

您可以在追加对象之前检查对象:

sb.append("Value: ");
if (s != null) sb.append(s);
System.out.println(sb);

要做的一个关键点是null与空字符串不同.空String仍然是一个String对象,其关联的方法和字段与之关联,其中空指针根本不是对象.

从StringBuilder的append方法的文档:

String参数的字符按顺序附加,按参数的长度增加此序列的长度.如果str为null,则附加四个字符"null".



2> Jon Skeet..:

鉴于文档很清楚,我不确定为什么你会认为它是空的.

如果str为null,则附加四个字符"null".

基本上,如果您有空引用,则根本不需要调用append,或者切换""的值.

如果你发现自己做了很多事情,你可以写一个方法来做这个替换:

public static String nullToEmpty(String text) {
    return text == null ? "" : text;
}

实际上,我刚刚查看了Guava文档,并且Strings该类具有该方法(但是使用了一个名为string而不是的参数text).



3> 小智..:

你可以使用commons-lang StringUtils#defaultString():

sb.append("Value: ").append(StringUtils.defaultString(myVar));



4> 小智..:

使用Java 8,您还可以使用java.util.Optional类提供默认值:

System.out.println(sb.append("Value: ").append(Optional.ofNullable(s).orElse("")));

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有