从数组中删除空元素(Java)

时间:2017-01-30 12:09:12

标签: java arrays if-statement for-loop

我正在尝试通过将现有元素复制到新数组来从数组中删除空元素。但是,即使我在for循环中初始化它,新数组的初始化也会导致我的返回值为null。

public String[] wordsWithout(String[] words, String target) {
    for(int i = 0; i < words.length; i = i +1){
        String store[] = new String[words.length];
        if (words[i] == target){
            words[i] ="";
        }
        else if(words[i] != target){
            words[i] = store[i];
        }       
    }
    return words;
}

5 个答案:

答案 0 :(得分:4)

我实际上不确定你想要实现什么,但如果你想从数组中删除一个空字符串,你可以使用java 8中的流和过滤器来完成它,如下所示:

String[] objects = Arrays.stream(new String[]{"This","", "will", "", "", "work"}).filter(x -> !x.isEmpty()).toArray(String[]::new);

答案 1 :(得分:2)

数组是不可变的,因此大小与创建新数组所需的大小相同 因此,如果您在Old数组的大小上创建一个新的数组,您仍将具有空元素

如果只想使用数组,则需要计算数组中的非null元素以获取新数组的大小。它更容易使用List / ArrayList

public String[] wordsWithout(String[] words, String target) {
    List<String> tempList=new ArrayList<String>();
    for(int i = 0; i < words.length; i = i +1){

        if (words[i]!=null||words[i].trim().length()>0){
            tempList.add(words[i]);
        }

    }
    return (String[]) tempList.toArray();
}

答案 2 :(得分:1)

要检查相等性,请使用.equals()方法i-e string1.equals(string2)并检查不相等性,可以使用相同的方法但不使用(!)运算符i-e。 !string1.equals(字符串2)。您应该在循环外部声明存储数组,因为在每次迭代中它都会创建一个新对象的onamed存储。在else条件下,这个存储[i] = words [i]。

答案 3 :(得分:0)

您不应该使用==运算符来比较字符串。这是不正确的,因为字符串是对象。请改用.equals()方法来解决您的问题。

您的代码的其余部分非常混乱,您很难理解您要实现的目标:每次在循环迭代中创建新的字符串数组store,然后分配其{{1 (默认情况下)值为null。你应该详细说明你的代码和算法。

答案 4 :(得分:0)

我在下面列出的内容很少。希望你能得到这方面的帮助。

  1. String store[] = new String[words.length]实例化一个数组 字符串但它没有用任何非实例化任何元素 空值。默认值为null,因此这是一个null数组 字符串。
  2. (words[i] != target)应替换为

    (!字[I] .equals(目标))