[英]How to remove a specific String from a String ArrayList
我有一个 ArrayList,其中包含一堆来自文件的单词,每个单词都在它们自己的单元格中。 其中一些词是完整的词,例如“物理学家、水、重力”。 然而,其他单词只是在整个程序过程中被拆分的字母。 例如,“it's”变成了“it”和“s”。 因此,我想删除除“I”和“A”之外的所有单字母单词,因为它们是实际单词。
这是我现在的代码:
for(int i=0;i<dictionnary.size();i++) {
if(dictionnary.get(i).compareToIgnoreCase("I")!=0||dictionnary.get(i).compareToIgnoreCase("A")!=0||dictionnary.get(i).length()==1){
dictionnary.remove(i);
}
}
其中字典是我的 ArrayList。但是,当我打印出我的 arrayList 的内容时,它的“s”仍然存在。 我还知道最初有一个单词“E”在上面的整个过程中被删除了。 我对为什么“S”仍然存在以及如何修复它感到困惑。
根据我的理解,这段代码通过 ArrayList 并检查大小写的长度是否为 1(所有单字母单词都是这种情况)以及检查该大小写是否为“I”或“A”的大小写,而不管是否大写。 然后它会删除不对应于“I”或“A”的案例。
考虑使用 Collection Iterator 在迭代期间安全移除元素。
for (Iterator<String> iter = dictionary.iterator() ; iter.hasNext() ; ) {
String word = iter.next();
if (word.length() == 1
&& !"I".equals(word)
&& !"A".equalsIgnoreCase(word)) {
iter.remove();
}
}
请改用迭代器。 假设您有一个列表 (1,2,3,4,5) 并且您想要删除数字 2 和 3。您开始循环并到达第二个元素 2。这里您的i
是 1。您将其删除元素和 go 到i=2
。 你现在拥有的是 (1,3,4,5)。 由于i=2
,您错过了一个元素。
这就是您应该改用迭代器的原因。 参考@vsfDawg 的回答。
我的建议如下:
您可以在下一种方式中使用 removeIf。
removeIf需要一个谓词。
public static void main(String[] args) {
List<String> dictionary = new ArrayList<>();
dictionary.add("I");
dictionary.add("A");
dictionary.add("p");
dictionary.add("its");
dictionary.add("water");
dictionary.add("s");
Integer sizeRemove =1;
dictionary.removeIf(
word ->
!"I".equals(word)
&& !"A".equalsIgnoreCase(word)
&& word.length() == sizeRemove
);
System.out.println(dictionary);
}
output 如下: [I, A, its, water]
参考: https://www.programiz.com/java-programming/library/arraylist/removeif
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.