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

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

 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; } 

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

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

数组是不可变的,因此大小与创建新数组所需的大小相同所以如果你在Old数组的大小上创建一个新的数组,你仍然会有null元素

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

 public String[] wordsWithout(String[] words, String target) { List tempList=new ArrayList(); 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(); } 

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

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

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

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

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

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