连接后如何在结果字符串之前删除null ..?

时间:2018-01-24 12:37:36

标签: java string

如何在连接两个字符串后删除null。

Ex:
String a = null;
String b = Hello;
a+=b;
System.out.println(a);// output is nullhello

这里,我需要输出只有你好, 提前谢谢。

5 个答案:

答案 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个变量abc。我们只需复制并粘贴c的相同代码。

在这种情况下,我们可以使用Streams

System.out.println(
        Stream.of(a,b)
                .filter(Objects::nonNull)
                .collect(Collectors.joining())
); 

它将创建一个由字符串ab组成的流;将过滤掉所有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它比三元表达式更具可读性。

相关问题