Java 方法仍在打印空值
我正试图阻止Array.toString()方法打印数组中的空值。我得到了所有正确的值,我只需要确保不打印空值。我试图实现一个if语句来控制它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
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());代码>。。。?