StringBuilder追加()和null值

时间:2010-10-18 15:33:44

标签: java null append stringbuilder

我有一个String的列表,我想用它们之间的空格连接它们。所以我正在使用StringBuilder。现在,如果String中的任何nullStringBuilder,则它们会public static void main(String ss[]) { StringBuilder sb = new StringBuilder(); String s; s = null; System.out.println(sb.append("Value: ").append(s)); } 字面上存储为'null'。这是一个小程序来说明问题:

{{1}}

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

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

9 个答案:

答案 0 :(得分:28)

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

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

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

从StringBuilder的附加方法文档:

  

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

答案 1 :(得分:15)

我不确定为什么你会认为它是空的,因为documentation很清楚:

  

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

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

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

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

确实,我刚刚查看了Guava文档,而Strings类完全具有该方法(但使用名为string而不是text的参数)。

答案 2 :(得分:9)

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

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

答案 3 :(得分:3)

您可以在一行中执行以下操作:

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

答案 4 :(得分:2)

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

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

答案 5 :(得分:2)

import java.util.Objects;
...
sb.append(Objects.toString(s, ""));

使用Java内部utils,不需要外部库。 toString接受String,检查它是否为null,是否为null,然后返回指定的默认值,在这种情况下为""(空字符串),如果不是null返回提供的字符串。

答案 6 :(得分:0)

出于我的目的,我需要稍微概括一下答案#2。 这是相同的函数,将Object作为参数,而不是String:

private String nullToEmpty(Object obj) {
    return obj == null ? "" : obj.toString();
}

答案 7 :(得分:-1)

@Shynthriir提到的无效检查是解决问题的最简单最有效的方法(AFAIK)。

但是我强烈建议将字符串启动到空字符串String str = "";,这样可以在更复杂的编程工作中为您节省很多麻烦。

答案 8 :(得分:-1)

你可以这样做:

sb.Replace("= ,", "= null,");

或:

sb.append("Value: ").append((s != null)? s: "NULL");