【问题标题】:How do I remove null elements from an ArrayList in Java?如何从 Java 中的 ArrayList 中删除空元素?
【发布时间】:2023-02-07 15:53:55
【问题描述】:

我一直试图从 ArrayList 中删除空条目,但没有成功。

首先,我使用特定的分隔符(标点符号和空格)将文件中的所有单词存储到 ArrayList 中。

然后我尝试从 ArrayList 中删除空条目。

当我打印整个列表时,空条目仍然存在。

我该如何解决这个问题?

            Scanner scanner = new Scanner(file);

            // Updating the delimiters
            scanner.useDelimiter("\\s|,|\\.|\\(|\\)|:|!|\\?|\"");

            // Creating an ArrayList and adding all words from the scanner object
            ArrayList<String> words = new ArrayList<String>();
            while (scanner.hasNext()) {
                words.add(scanner.next());
            }

            // Removing null entries
            for (int i = 0; i < words.size(); i++) {
                if (words.get(i) == null)
                {
                    words.remove(i);
                }
            }

            // Printing all elements
            System.out.print(words);

            // Closing the Scanner object
            scanner.close();

当前输出示例:

[10, years, , , 3, Lec, , , 3, Lab, , , , Coordinating, Board, Academic, Approval, Number, 1102015707, ]

所需输出示例:

[10, years, 3, Lec, 3, Lab, Coordinating, Board, Academic, Approval, Number, 1102015707]

【问题讨论】:

  • 这些不是 null 元素(如果它们是 null,您将在输出中看到“null”一词)。可能它们是空的Strings。做类似words.removeIf(String::isEmpty) 的事情可能对你有用。
  • 一个问题是,在您删除(比方说)元素 3 之后,您仍在递增 i(到 4),但是以前的元素 4 现在是元素 3,而您没有检查它。典型的修复方法是在调用 words.remove(i) 之后递减 i,或者从结尾列表的开头(所以for (int i = words.size() - 1; i &gt;= 0; i--))。
  • 不完全相同,但可以在此处找到从列表中删除元素的所有方法 - Iterating through a Collection, avoiding ConcurrentModificationException when removing objects in a loop

标签: java arraylist


【解决方案1】:

尝试向后循环:

        for (int i = words.size(); --i >= 0; ) {
            if (words.get(i) == null)
            {
                words.remove(i);
            }
        }

【讨论】:

    猜你喜欢
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 2013-02-24
    相关资源
    最近更新 更多