繁体   English   中英

如何从字符串 ArrayList 中删除特定字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM