Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 方法仍在打印空值_Java_Arrays_Tostring - Fatal编程技术网

Java 方法仍在打印空值

Java 方法仍在打印空值,java,arrays,tostring,Java,Arrays,Tostring,我正试图阻止Array.toString()方法打印数组中的空值。我得到了所有正确的值,我只需要确保不打印空值。我试图实现一个if语句来控制它 if(who.getToppings!= null){ System.out.println("Toppings: "+ Arrays.toString(who.getToppings())); } 假设数组中有null元素要过滤掉,则可以使用以下方法: Arrays.stream(who.getToppings()) .fi

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

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

假设数组中有
null
元素要过滤掉,则可以使用以下方法:

Arrays.stream(who.getToppings())
      .filter(Objects::nonNull)
      .collect(Collectors.joining(", ", "[", "]"));
这实际上创建了一个
(其中
T
是数组的类型),过滤掉
null
元素,并将其收集到一个
字符串
复制
数组#toString

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

System.out.println("Toppings: " + Arrays.stream(who.getToppings())
                                        .filter(Objects::nonNull)
                                        .collect(Collectors.joining(", ", "[", "]")));
我得到了所有正确的值,我只需要确保没有 打印出空值

您只需重新创建一个没有空元素的数组:

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

此方法打印空值,因为数组中有
null
引用。 方法
Arrays.toString(Object[]a)
意识到这种情况,不要盲目地从 数组中的每个对象都要防止
NullPointerException
。而不是使用
String.valueOf(Object Object)
来检查 对象在实际调用其上的
toString()
之前为空。当对象为null时,此方法返回字符串“null”

数组类中的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(", ");
        }
    }
和字符串中的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();
}

数组中可能有
null
元素-如果不显示它们,可以通过在数组上循环构建
String
或过滤掉
null
值。那么
getToppings
是字段还是方法?您的代码不一致。另外,看起来您正在尝试检查数组是否为null,这不会停止打印null值。@是的,根据从文本文件中读取的内容,我的数组中有null元素。@azurefrog它是一个方法
Arrays.toString(Arrays.stream(who.getToppings()).filter(x->x!=null)。toArray());。。。?