Java StringBuilder append()和空值
我有一个Java StringBuilder append()和空值,java,null,append,stringbuilder,Java,Null,Append,Stringbuilder,我有一个Strings的列表,我想在它们之间加上空格。所以我使用的是StringBuilder。现在,如果任何字符串为null,它们将以“null”的形式存储在StringBuilder中。下面是一个小程序来说明这个问题: public static void main(String ss[]) { StringBuilder sb = new StringBuilder(); String s; s = null; System.out.println(sb
String
s的列表,我想在它们之间加上空格。所以我使用的是StringBuilder
。现在,如果任何字符串
为null
,它们将以“null”的形式存储在StringBuilder中。下面是一个小程序来说明这个问题:
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”
有办法解决这个问题吗?您可以在附加对象之前对其进行检查:
sb.append("Value: ");
if (s != null) sb.append(s);
System.out.println(sb);
需要指出的一个关键点是,null与空字符串不同。空字符串仍然是一个字符串对象,具有与其关联的方法和字段,其中空指针根本不是对象
从StringBuilder的append方法的文档中:
字符串参数的字符按顺序追加,将此序列的长度增加参数的长度。如果str为null,则附加四个字符“null”
@shynthrir提到的空检查是解决问题的最简单、最有效的方法(AFAIK)
不过,我强烈建议将字符串初始化为空字符串string str=“”相反,这将在更复杂的编程工作中为您节省大量的头痛 我不知道你为什么会认为它是空的,因为问题很清楚:
如果str为null,则附加四个字符“null”
基本上,如果有空引用,您需要根本不调用append,或者切换“”的值
如果您发现自己经常这样做,您可以编写一个方法来执行此替换:
public static String nullToEmpty(String text) {
return text == null ? "" : text;
}
事实上,我刚刚查看了文档,该类正好具有该方法(但是使用了名为string
的参数,而不是text
)。您可以使用commons lang的:
出于我的目的,我需要稍微概括一下答案2。
以下是相同的函数,以Object作为参数,而不是字符串:
private String nullToEmpty(Object obj) {
return obj == null ? "" : obj.toString();
}
在一行中,您可以执行以下操作:
System.out.println(sb.append("Value: ").append((s==null)?"":s));
sb.Replace("= ,", "= null,");
对于Java 8,您还可以使用Java.util.Optional类提供默认值:
System.out.println(sb.append(“Value:”).append(可选的.不可用的.或不可用的(“”))代码>
使用Java内部UTIL,不需要外部LIBtoString
获取字符串,检查它是否为null
,如果它是null
,然后返回指定的默认值,在本例中为”
(空字符串),如果它不是null
,则返回提供的字符串。您可以执行以下操作:
System.out.println(sb.append("Value: ").append((s==null)?"":s));
sb.Replace("= ,", "= null,");
或:
附加((s!=null)s:“null”) 感谢您的澄清:),我忘了研究Javadoc唯一的问题是,如果最后一行文本恰好是“空的”(例如,律师给客户的文本:史密斯先生,法院已判决您的婚姻现在为空),那么您将丢失最后一行-以及消息中最重要的单词。完美的这帮了大忙!虽然“null”有时很有用,但我真的只想要一个空字符串。这并不能回答这个问题。要评论或要求作者澄清,请在他们的帖子下方留下评论——你可以随时在自己的帖子上发表评论,一旦你有足够的评论,你就可以发表评论了。@Muhammadda,我不认为我的回答不能解决这个问题。这既不是批评也不是澄清…所以我没有把它放在评论中。。。你能解释一下你自己吗?你期望发生什么?我知道我个人认为空字符串和空字符串是一样的,因为两者在字符串中都有零个字符,并且零个字符应该附加到sb对象。我打赌警察也这么想。我并不是说这是正确的,只是说这是一个合理的答案,关于什么是预期的问题。