我试图阻止Array.toString()方法打印出数组中的空值。我得到了所有正确的值,我只需要确保不打印出空值。我试图实现一个if语句来控制它。
if(who.getToppings!= null){
System.out.println("Toppings: "+ Arrays.toString(who.getToppings()));
}
答案 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;。
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()之前检查nullpublic 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();
}