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

5

我正在尝试通过将现有元素复制到新数组中来删除数组中的空元素。然而,新数组的初始化会导致我的返回值为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;
}

1
你需要执行 store[i] = words[i];,然后返回 store - MD Sayem Ahmed
可能是重复的问题,类似于这个。请检查一下,这可能会对你有所帮助。 - Ruchika Sharma
你正在每次迭代中创建一个名为store[]的新数组。store[]始终是一个具有words[]长度的数组,但仅包含空值。 - baao
else块中,您不需要重新检查您的if条件。 - khelwood
看起来你想要做的是将与“目标”匹配的每个单词替换为一个空字符串,而不是删除任何内容。实际上,在这里有很多问题(你正在使用未分配值的store [i],在循环内初始化它,返回原始数组,将字符串作为对象进行比较)。 - RealSkeptic
5个回答

8

我其实不确定你想要达到什么目的,但如果你想从数组中删除一个空字符串,你可以使用Java 8中的流和过滤器来实现,如下所示:

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

2

数组是不可变的,所以大小保持不变,您需要创建一个新的数组。因此,如果您根据旧数组的大小创建一个新数组,您仍将拥有空元素。

如果您只想使用数组,则需要计算数组中非空元素的数量以获取新数组的大小。使用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();
}

好的,我理解了它的逻辑,但您能否提供一种不使用(List)的方法?现在我遇到的问题是复制数组的初始化。我无法在for循环外或内初始化for循环,因为这样只会返回一个具有空值的数组。 - Ruben
@Ruben 这与数组相同,只需删除列表并使用数组即可。 - AxelH
如果您使用数组,需要先计算现有数组中填充的元素数量,然后将其用作新数组的大小;如果您使用现有数组的大小,则仍会存在空元素。 - Joe ONeil
@Joe ONeil 请参考我下面的答案,如果有帮助,请告诉我,或者如果需要进一步的帮助。 - nits.kk

1
使用.equals()方法来检查相等性,例如string1.equals(string2),要检查非相等性,可以使用相同的方法,但带有not(!)运算符,即!string1.equals(string2)。应该在循环外部声明存储数组,因为在每次迭代中它会创建一个新对象onamed store。在else条件中执行此操作store[i] = words[i]。

0

在编程中,你不应该使用==运算符来比较字符串。这是不正确的,因为字符串是对象。相反,应该使用.equals()方法,这样可以解决你的问题。

你代码的其余部分相当混乱,很难理解你想要实现什么:你在循环迭代中每次创建一个新的字符串数组store,然后将其null(默认)值赋给words[i]。你应该详细说明你的代码和算法。


同样的方式 ! words[i].equals(target) - Andremoniy

0

以下是我列举的一些要点,希望您能从中获得帮助。

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

    (!words[i].equals(target))


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