StringBuilder append() 和 null 值

2022-09-01 03:42:46

我有一个s列表,我想用中间的空格连接它们。所以我正在使用.现在,如果其中任何一个是,它们被存储在字面上作为“null”。下面是一个小程序来说明这个问题:StringStringBuilderStringnullStringBuilder

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

    String s;
    s = null;

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

我希望输出是“值:”,但它显示为“值:空”

有没有办法解决这个问题?


答案 1

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

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

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

从 StringBuilder 的 append 方法的文档:

将按顺序追加 String 参数的字符,使此序列的长度增加参数的长度。如果 str 为 null,则追加四个字符“null”。


答案 2

我不确定为什么你会期望它空出来,因为文档很清楚:

如果 str 为 null,则追加四个字符“null”。

基本上,如果您有空引用,则需要根本不调用 append,或者将值切换为 “”。

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

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

事实上,我刚刚看了Guava文档,Strings类就有了这种方法(但是调用了一个参数而不是)。stringtext