我想删除列表中仅包含空格字符的所有字符串。我尝试了以下代码,但有些行未删除:
List<String> getarray = /* ... */;
for (int i = 0; i < getarray.size(); i++) {
if (getarray.contains(" ").getarray.contains(null)) {
getarray.remove(i);
} else {
System.out.println("a: " + getarray.get(i));
}
}
这只适用于某些输入,有人可以帮我理解原因吗?
答案 0 :(得分:3)
首先使用一些 Iterator 来迭代并执行从ArrayList中删除元素的操作。
第二个解决你的空字符串问题,你可以使用 trim()和 isEmpty()方法
尝试以下代码:
Iterator<String> it = getarray.iterator();
while (it.hasNext()) {
String myValue = it.next();
if (myValue.trim().isEmpty()) {
it.remove();
} else {
System.out.println("a: " + myValue);
}
}
答案 1 :(得分:3)
如果要删除元素,请使用迭代器。根据Java文档:
Iterator取代了Java Collections Framework中的Enumeration。迭代器在两个方面与枚举不同: 迭代器允许调用者在迭代期间使用定义良好的语义从底层集合中删除元素。 方法名称已得到改进
请尝试以下代码:
Iterator<String> itr = getarray.iterator();
while (itr.hasNext()) {
String value = itr.next();
if (value.trim().isEmpty()) {
itr.remove();
} else {
System.out.println("a: " + value);
}
}
答案 2 :(得分:1)
您误解元素为空或仅由空格组成 AND 元素包含空格:
所以element.trim().isEmpty()
代替element.contains(" ");
.trim()
会删除String
所以这会做你的东西,它将遍历列表,并且只保留非空的元素(或仅包含空格)
getarray = getarray.stream().filter(s -> !s.trim().isEmpty()).collect(Collectors.toList());
如果您想在以后执行打印:getarray.forEach(System.out::println);