从数组中删除所有零

新手上路,请多包涵

我有一个数组:

 [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 搜索也没有给我任何好的答案。

原文由 Hidde 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 642
2 个回答

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

 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;

原文由 Mike Nakis 发布,翻译遵循 CC BY-SA 3.0 许可协议

这个怎么样:

 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]

原文由 Eng.Fouad 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题