从 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) 中删除空元素的主要内容,如果未能解决你的问题,请参考以下文章