【发布时间】:2020-01-18 10:55:55
【问题描述】:
此方法从术语列表中删除常用英文单词——我将删除“commonWords.txt”中找到的所有单词。此外,此方法不应引发异常。
terms 是 List 的私有 List。
private void removeCommonEnglishWords() {
Scanner sc = null;
try {
sc = new Scanner(new File("commonWords.txt"));
} catch(Exception e) {
System.out.println("The file is not found");
}
List<String> commonWords = new ArrayList<String>();
int count = 0;
while(sc.hasNextLine()) {
count++;
commonWords.add(sc.nextLine());
}
Iterator<String> termIt = terms.iterator();
while(termIt.hasNext()) {
String term = termIt.next();
for(String word : commonWords)
if(term.equalsIgnoreCase(word))
termIt.remove();
}
//terms = listToIterator(termIt);
}
这在运行时根本不会改变条款。但是当我取消对最后一行 (terms = listToIterator(termIt);) 的注释时,我想我会得到一个空词。我究竟做错了什么?
更新:
public static <String> List<String> listToIterator(Iterator<String> iterator)
{
List<String> list = new ArrayList<>();
iterator.forEachRemaining(list::add);
return list;
}
【问题讨论】:
-
您收到的错误是什么?
-
您是否已经排除了
listToIterator的问题?此外,该方法可能应该称为iteratorToList。 -
整个 try catch 块应该包含整个方法。如果找不到该文件,则不应执行任何其他操作!还有条款是从哪里来的?从您正在迭代的列表中删除项目也会遇到问题。你应该克隆它。在迭代原始时从克隆中删除,然后用克隆替换原始。
for (String s: terms) {}也是一个更简单的语法。 -
“您在从列表中删除项目时也会遇到问题。” -
Iterator.remove应该可以工作!
标签: java string list iterator java.util.scanner