如何在Java中从数组中删除null

5

我编写了一个方法,用于从程序中需要的数组中删除空值。但是,这个方法似乎不起作用,空值没有被删除。以下是我的代码。

public void removeNull(String[] a)
{
       for(int i=0; i<a.length; i++)
    {
        if(a[i] == null)
        {
            fillArray(a, i);
        }
    }
}

public void fillArray(String[] a, int i)
{
    String[] a2 = new String[a.length-1];

    for(int j=0; j<a2.length; j++)
    {
            if(j<i)
            {
                a2[j]=a[j];
            }
        else if(j>i)
        {
            a2[j]=a[j+1];
        }
    }

    a=a2;
}
感谢您的提前帮助!

可能存在相同的问题链接! - Gatekeeper
能否不允许将空值放入数组中? - John Kane
12个回答

0

嗯,很多人之前都说过了……但我也想强调一下这个解决办法:

你可以使用某种类型的集合,例如ArrayList或List,并仅添加非空元素。最后,你必须返回由集合组成的新String[]。

这里有一个示例,你可以检查一下其正确性:

import java.util.ArrayList;

public class NullRemove {

    public static String[] removeNull(String[] a) {
        ArrayList<String> aux = new ArrayList<String>();
        for (String elem : a) {
            if (elem != null) {
                aux.add(elem);
            }
        }
        return (String[]) aux.toArray(new String[aux.size()]);
    }
    public static void main(String[] args) {
        String[] init = new String[]{"aaa", null, "bbb", "ccc", null, "ddd", 
            "eee", "fff", null};

        String[] result = NullRemove.removeNull(init);

        System.out.println("Start Check result");

        for (String elem : result) {
            if (elem == null) System.out.println("NULL element");
        }

        System.out.println("End Check result");
    }
}

这段代码中的for循环没有输出任何内容,因为没有空元素 :)

谢谢!


0

有几件事情:

  1. 你不想String[] a2 = new String[a.length-1];`变成

String[] a2 = new String[a.length];

把它变成length - 1会不会太短了?

  1. 你的代码中需要一个i == j的情况。这就是为什么空值没有被更新的原因。

  2. 你用第二个函数想解决什么问题?考虑到我认为你的问题,它似乎过于复杂了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接