我正在尝试通过将现有元素复制到新数组来从数组中删除空元素。但是,即使我在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;
}
答案 0 :(得分:4)
我实际上不确定你想要实现什么,但如果你想从数组中删除一个空字符串,你可以使用java 8中的流和过滤器来完成它,如下所示:
String[] objects = Arrays.stream(new String[]{"This","", "will", "", "", "work"}).filter(x -> !x.isEmpty()).toArray(String[]::new);
答案 1 :(得分:2)
数组是不可变的,因此大小与创建新数组所需的大小相同 因此,如果您在Old数组的大小上创建一个新的数组,您仍将具有空元素
如果只想使用数组,则需要计算数组中的非null元素以获取新数组的大小。它更容易使用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();
}
答案 2 :(得分:1)
要检查相等性,请使用.equals()方法i-e string1.equals(string2)并检查不相等性,可以使用相同的方法但不使用(!)运算符i-e。 !string1.equals(字符串2)。您应该在循环外部声明存储数组,因为在每次迭代中它都会创建一个新对象的onamed存储。在else条件下,这个存储[i] = words [i]。
答案 3 :(得分:0)
您不应该使用==
运算符来比较字符串。这是不正确的,因为字符串是对象。请改用.equals()
方法来解决您的问题。
您的代码的其余部分非常混乱,您很难理解您要实现的目标:每次在循环迭代中创建新的字符串数组store
,然后分配其{{1 (默认情况下)值为null
。你应该详细说明你的代码和算法。
答案 4 :(得分:0)
我在下面列出的内容很少。希望你能得到这方面的帮助。
String store[] = new String[words.length]
实例化一个数组
字符串但它没有用任何非实例化任何元素
空值。默认值为null,因此这是一个null数组
字符串。 (words[i] != target)
应替换为
(!字[I] .equals(目标))