从数组中删除空元素(Java)
我试图通过将现有元素复制到一个新数组来从数组中删除空元素。但是,新数组的初始化会导致我的返回值为null,即使我在从数组中删除空元素(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
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请参考我下面的答案,并让我知道它是否有帮助,或者您是否需要进一步的帮助。