【发布时间】: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 >= 0; i--))。 -
不完全相同,但可以在此处找到从列表中删除元素的所有方法 - Iterating through a Collection, avoiding ConcurrentModificationException when removing objects in a loop。