Array.toString()方法仍然打印出空值

时间:2018-02-05 23:14:32

标签: java arrays tostring

我试图阻止Array.toString()方法打印出数组中的空值。我得到了所有正确的值,我只需要确保不打印出空值。我试图实现一个if语句来控制它。

  if(who.getToppings!= null){
   System.out.println("Toppings: "+ Arrays.toString(who.getToppings()));
  }

3 个答案:

答案 0 :(得分:1)

假设您希望过滤出阵列中有null个元素,那么您可以使用以下内容:

Arrays.stream(who.getToppings())
      .filter(Objects::nonNull)
      .collect(Collectors.joining(", ", "[", "]"));

这实际上创建了一个Stream<T>(其中T是您的数组的类型),过滤掉null个元素,并将其收集到String复制{{1} }}

假设您的代码已编译,您应该能够在print语句中调用它:

Arrays#toString

答案 1 :(得分:0)

  

我得到了所有正确的值,我只需要确保不要   打印出空值。

您可以简单地重新创建一个没有null元素的数组:

Object[] toppingsNotNull = Arrays.stream(who.getToppings())
                                 .filter(Objects::nonNull)
                                 .toArray();
if (toppingsNotNull.length > 0){
   System.out.println("Toppings: " + toppingsNotNull);
}
else{
   ....
}

答案 2 :(得分:0)

此方法打印空值,因为您的数组内部有null个引用。 方法Arrays.toString(Object[] a)意识到这种情况,而不是盲目地调用方法toString() 数组中的每个对象都可以阻止NullPointerException。而不是String.valueOf(Object object)使用,检查是否 在实际调用toString()之前,object为null。当object为null时,此方法返回字符串&#34; null&#34;。

Arrays类中的

toString()方法:

public static String toString(Object[] a) {
        if (a == null)
            return "null";

        int iMax = a.length - 1;
        if (iMax == -1)
            return "[]";

        StringBuilder b = new StringBuilder();
        b.append('[');
        for (int i = 0; ; i++) {
            b.append(String.valueOf(a[i]));
            if (i == iMax)
                return b.append(']').toString();
            b.append(", ");
        }
    }
String中的

和valueOf()方法

 public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
 }

当您想要打印数组的值并且不希望看到空值迭代它时 在从值:

调用toString()之前检查null
public String arrayToString(Object[] array) {
    StringBuilder result = new StringBuilder();
    for(Object object : array) {
        if(object != null) {
            result.append(object); //calls object.toString() inside of append method
            result.append(" ");
        }
    }
    return result.toString().trim();
}