从数组中删除所有零

2022-09-02 23:21:16

我有一个数组:

[0, 5, 6, 0, 0, 2, 5]

我想从中删除所有零,以便返回(保持相同的顺序):

[5, 6, 2, 5]

有没有比以下更简单的方法来删除所有零?

int[] array = {0, 5, 6, 0, 0, 2, 5};
        int len = 0;
        for (int i=0; i<array.length; i++){
            if (array[i] != 0)
                len++;
        }
        int [] newArray = new int[len];
        for (int i=0, j=0; i<array.length; i++){
            if (array[i] != 0) {
                newArray[j] = array[i];
                j++;
            }
        }

我无法在Arrays类中找到任何方法,Google / SO搜索也没有给我任何好的答案。


答案 1

这是在代码中显示它比用简单的英语解释更容易的罕见情况之一:

int targetIndex = 0;
for( int sourceIndex = 0;  sourceIndex < array.length;  sourceIndex++ )
{
    if( array[sourceIndex] != 0 )
        array[targetIndex++] = array[sourceIndex];
}
int[] newArray = new int[targetIndex];
System.arraycopy( array, 0, newArray, 0, targetIndex );
return newArray;

答案 2

怎么样:

Integer[] numbers = {1, 3, 6, 0, 4, 0, 3};
List<Integer> list = new ArrayList<Integer>(Arrays.asList(numbers));
list.removeAll(Arrays.asList(Integer.valueOf(0)));
numbers = list.toArray(new Integer[list.size()]);
System.out.println(Arrays.toString(numbers));

输出:

[1, 3, 6, 4, 3]