如何使用Array.toString()打印数组的所有非null元素

时间:2014-10-03 13:41:21

标签: java arrays

所以我需要打印出一个整数数组。问题是当用户输入要处理和排序的号码时,我不知道用户输入了多少号码。唯一的规则是用户只能输入少于10000个数字。

所以我创建了一个可以容纳10000个数字的数组,但是如果用户输入的数字少于10000个,那么Array.toString()函数会输出所有内容,甚至是空格。

有没有办法绕过它,或者是否有任何其他方法可以在一行中输出数组,将输出格式化为如下所示:[1, 2, 3, 4, 5, 6]

非常感谢!

3 个答案:

答案 0 :(得分:4)

将用户的输入存储在ArrayList中会更容易,然后只需打印myArryList.toString()

答案 1 :(得分:2)

如果你想在Java中使用动态数组,最好的方法是学习如何使用列表:

List<Integer> integers = new ArrayList<Integer>();

它只会输入您输入的数字。

如果您不想重写您的程序,这也是解决方案:

    Integer[]x = new Integer[50];
    List<Integer> integers = new ArrayList<Integer>();        
    integers = new ArrayList<Integer>(Arrays.asList(x));

答案 2 :(得分:2)

ArrayList<T>(可选<T>为泛型)。如果有更多输入可用,则动态添加更多内存的数组。将元素添加到此类列表的摊销成本为 O(1),但它提供了一种处理输入的便捷方式。

要回答您的问题,因为@Mureinik已经回复了您,然后可以使用ArrayList.toString()将列表转换为文字表示。

要回答您的真实问题,您可以执行以下操作:

public static<T> String toStringArrayNonNulls (T[] data) {
    StringBuilder sb = new StringBuilder();
    sb.append("[");
    int n = data.length;
    int i = 0;
    for(; i < n; i++) {
        if(data[i] != null) {
            sb.append(data[i].toString());
            break;
        }
    }
    for(; i < n; i++) {
        if(data[i] != null) {
            sb.append(",");
            sb.append(data[i].toString());
        }
    }
    sb.append("]");
    return sb.toString();
}

使用您想要的任何类型的数组调用该方法。

<强>实施例

String[] names = new String[] {"Alice",null,"Charly","David",null,null};
System.out.println(toStringArrayNonNulls(names));
Integer[] primes = new Integer[] {2,3,null,null,11};
System.out.println(toStringArrayNonNulls(primes));
Object[] namesAndPrimes = new Integer[] {"Alice",2,null,3,null,"Charly",null,11};
System.out.println(toStringArrayNonNulls(namesAndPrimes));