从数组中删除空元素(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]
。 你应该详细说明你的代码和算法。
我在下面列出的内容很少。 希望你能得到这方面的帮助。
-
String store[] = new String[words.length]
实例化一个Strings数组,但它没有实例化任何具有任何非null值的元素。 默认值为null,因此这是一个null字符串数组。 -
(words[i] != target)
应替换为(!字[I] .equals(目标))