从 Array(Java) 中删除空元素

Posted

技术标签:

【中文标题】从 Array(Java) 中删除空元素【英文标题】:Removing empty element from Array(Java) 【发布时间】:2017-06-15 14:11:11 【问题描述】:

我试图通过将现有元素复制到新数组来从数组中删除空元素。但是,即使在 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;

【问题讨论】:

你需要做store[i] = words[i];,然后返回store this 的可能重复项。请检查一下,这可能会对您有所帮助。 您正在为每次迭代创建新的 store[]。 store[] 始终是一个长度为 words[] 的数组,但只包含 emtpy 值 您无需在 else 块中重新检查您的 if 条件。 看来您的目标是用空字符串替换与target 匹配的每个单词,而不是删除任何内容。事实上,这里有很多问题(你使用 store[i] 却没有给它赋值,你在循环中初始化它,你返回你的原始数组,你将字符串作为对象进行比较)。 【参考方案1】:

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

如果你只想使用数组,你需要计算数组中的非空元素来得到新数组的大小。使用 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 这个和数组一样,只是去掉列表,改用数组 如果您使用数组,您需要先计算现有数组中填充的元素,然后将其用作新数组的大小,或者如果您使用现有数组的大小,您仍然会有空元素 @Joe ONeil 请参考下面我的回答,如果有帮助或者您需要进一步帮助,请告诉我。【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

【参考方案4】:

我将以下几点作为要点。希望您能从中得到帮助。

    String store[] = new String[words.length] 实例化一个数组 字符串,但它不会用任何非实例化任何元素 空值。默认值为 null,因此这是一个 null 数组 字符串。

    (words[i] != target) 应替换为

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

【讨论】:

【参考方案5】:

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

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

【讨论】:

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

以上是关于从 Array(Java) 中删除空元素的主要内容,如果未能解决你的问题,请参考以下文章

从数组中删除空元素

从分解的字符串中删除空数组元素[重复]

如何删除数组中的空元素[重复]

PHP |通过重新排序从数组中删除元素?

从字符串指针数组中删除一个元素

es5 - array - pop