如何在连接两个字符串后删除null。
Ex:
String a = null;
String b = Hello;
a+=b;
System.out.println(a);// output is nullhello
这里,我需要输出只有你好, 提前谢谢。
答案 0 :(得分:3)
您可以使用此
String a = null;
String b = "Hello";
a = ((a==null) ? "": a) + b;
System.out.println(a);
答案 1 :(得分:2)
Java设计者认为,当应用于+=
左值null
引用作为特殊情况时,通过注入a(相当随意)来处理由sum运算符java.lang.String
组成的复合赋值是一个好主意。 )nullness的文本字符串。
(我认为这是一种彻头彻尾的疯狂行为:如果将NullPointerException
应用于+=
这样的数字盒装类型,则可以选择抛出java.lang.Integer
。 )
如果您不想要这种行为,那么您需要专门编程才能避免这种行为。
答案 2 :(得分:1)
您可以使用自定义方法,这是一行代码:
public static String concat(String a, String b) {
return a == null ? b : b == null ? a : a + b;
}
答案 3 :(得分:1)
可能有点开销,但您可以使用Objects.toString方法:
String a = null;
String b = Hello;
System.out.println(Objects.toString(a,"").concat(Objects.toString(b,"")));
public static String toString(Object o, String nullDefault)
如果是,则返回在第一个参数上调用toString的结果 第一个参数不为null,否则返回第二个参数。
这将处理所有可能的情况{(a == null,b!= null),(a!= null,b == null),(a == null,b == null),(a! = null,b!= null)}
其他替代方案将使用Optional
System.out.println(
Optional.ofNullable(a).orElse("")
.concat(Optional.ofNullable(b).orElse(""))
);
public T orElse(T other)
如果存在则返回值,否则返回其他值。
这与第一个解决方案相同。这两种解决方案都有一个共同的缺点:需要为每个附加变量复制代码。例如,如果现在我们需要连接3个变量a
,b
和c
。我们只需复制并粘贴c
的相同代码。
在这种情况下,我们可以使用Streams
System.out.println(
Stream.of(a,b)
.filter(Objects::nonNull)
.collect(Collectors.joining())
);
它将创建一个由字符串a
和b
组成的流;将过滤掉所有null的字符串,最后使用空分隔符收集所有剩余的字符串。如果有超过2个变量,我们只需将它们添加到初始流中。
我希望你会发现这很有帮助。
答案 4 :(得分:0)
您可以使用Google的Guava库在连接之前删除null。
String a = Strings.nullToEmpty(null);
String b = Strings.nullToEmpty("Hello");
a+=b;
System.out.println(a);// output is hello
它使代码更明确地表明你不想要null,IMO它比三元表达式更具可读性。