从java数组中删除空值

时间:2015-12-29 19:04:04

标签: java arrays

我正在尝试从csv字符串转换的数组中删除空值。

这就是我想要做的。

public class ArrayTest {

    public static void main(String[] args) {

        String commaSeparated = "item1,null,item1,null,item3";
        String [] items = commaSeparated.split(",");

        String[] result = removeNull(items);

        System.out.println(Arrays.toString(result));
    }

     public static String[] removeNull(String[] items) {
            ArrayList<String> aux = new ArrayList<String>();
            for (String elem : items) {
                if (elem != null) {
                    aux.add(elem);
                }
            }

            return (String[]) aux.toArray(new String[aux.size()]);
        }

}

我仍然得到如下的输出,它仍然具有空值。能不能指出我这个

有什么问题
[item1, null, item1, null, item3]

4 个答案:

答案 0 :(得分:1)

更改

if (elem != null) 

if (!elem.equals("null"))

.split函数返回一个字符串数组,因此那些预期为null的元素实际上不是"null"字符串。

答案 1 :(得分:1)

您的removeNulls()方法确实删除了空Strings,但请记住,当您执行String.split时,您实际上正在创建一个非空String,其值恰好发生在be&#34; null&#34;。

所以改变这个......

if (elem != null) {

为此,要考虑&#34; null&#34; ...

if (elem != null && !elem.equalsIgnoreCase("null")) {

答案 2 :(得分:0)

removeNull(String[])工作正常,这是被打破的测试。考虑创建这样的测试输入:

public static void main(String[] args) {

    String [] items = {"item1",null,"item1",null,"item3"};

    String[] result = removeNull(items);

    System.out.println(Arrays.toString(result));
}

顺便说一下,这是一个考虑仿制药的好地方。如果您希望方法签名看起来像这样T[] removeNull(T[] input),该怎么办?这可能会为您提供一些有趣的选择和更多样化的最终产品。

答案 3 :(得分:0)

with streams:

public static void main(String[] args) {
    String commaSeparated = "item1,null,item1,null,item3";
    String[] items = commaSeparated.split(",");

    String[] result = Arrays.stream(items)
            .filter(s -> s != null && !s.equals("null"))
            .toArray(String[]::new);

    System.out.println(Arrays.toString(result));
}