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

从数组中删除空元素(Java),java,arrays,if-statement,for-loop,Java,Arrays,If Statement,For Loop,我试图通过将现有元素复制到一个新数组来从数组中删除空元素。但是,新数组的初始化会导致我的返回值为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 (wo

我试图通过将现有元素复制到一个新数组来从数组中删除空元素。但是,新数组的初始化会导致我的返回值为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;
}
public String[]wordsWithout(String[]words,String目标){
for(int i=0;i
不应使用
=
运算符比较字符串。这是不正确的,因为字符串是对象。改用
.equals()
方法,这将解决您的问题


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

以下几点是我要说的。希望你能从中得到帮助

  • String store[]=新字符串[words.length]
    实例化 字符串,但它不使用任何非 空值。默认值为null,因此这是null的数组 字符串
  • (单词[i]!=target)
    应替换为

    (!words[i].等于(目标))


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

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

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

    数组是不可变的,因此大小保持不变,以便创建新数组 因此,如果根据旧数组的大小创建新数组,则仍然会有空元素

    如果只想使用数组,则需要对数组中的非空元素进行计数,以获得新数组的大小。使用列表/数组列表更容易

    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();
    }
    
    public String[]wordsWithout(String[]words,String目标){
    List templast=new ArrayList();
    for(int i=0;i0){
    添加(单词[i]);
    }
    }
    return(字符串[])templast.toArray();
    }
    
    您需要执行
    存储[i]=单词[i]
    ,然后返回
    存储
    。的可能重复项。请检查,这可能会对您有所帮助。您正在通过每次迭代创建store[]new。store[]始终是一个具有单词[]长度的数组,但只保留emtpy值。您不需要在
    else
    块中重新检查
    if
    条件。您的目标似乎是用空字符串替换与
    target
    匹配的每个单词,而不是删除任何内容。事实上,这里有很多错误(您使用
    store[i]
    时从未给它赋值,您在循环中初始化它,您返回原始数组,您将字符串作为对象进行比较)。同样的方法
    !words[i].equals(target)
    。好的,我知道它的逻辑,但是你能推荐一种不使用(List)的方法吗。现在我面临的问题是复制数组的初始化。我不能在for循环的外部或内部初始化for循环,因为我只返回一个null数组values@Ruben这与数组相同,只需删除列表并使用数组代替标题。如果使用数组,则需要先计算现有数组中已填充的元素,然后将其用作新数组的大小,或者如果使用现有数组的大小,则仍将为空elements@JoeONeil请参考我下面的答案,并让我知道它是否有帮助,或者您是否需要进一步的帮助。