使用文件删除常用英文单词
Removing common English words with a file
此方法从术语列表中删除常用英语单词——我要删除在 "commonWords.txt" 中找到的所有单词。此外,此方法不应引发异常。
terms
是 Strings
的私有 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;
}
除了伪造的异常处理之外,您问题中的代码没有任何问题。这留下了三种可能性:
您尝试读取的 commonWords.txt
文件不在您执行程序时/所在的工作目录中。
terms
列表是空的
你的listToIterator
方法有问题。
更新
既然我看到了 listToIterator
方法以及您是如何调用它的,问题就很清楚了。
该方法耗尽迭代器并将其(剩余)内容添加到一个新列表中……returns。 (这与它的名字完全相反!)
该方法没问题,但问题是您在 hasNext()
方法返回 false
的迭代器上调用它。换句话说,迭代器已经被耗尽了。
因此列表 returns 将为空。
此方法从术语列表中删除常用英语单词——我要删除在 "commonWords.txt" 中找到的所有单词。此外,此方法不应引发异常。
terms
是 Strings
的私有 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;
}
除了伪造的异常处理之外,您问题中的代码没有任何问题。这留下了三种可能性:
您尝试读取的
commonWords.txt
文件不在您执行程序时/所在的工作目录中。terms
列表是空的你的
listToIterator
方法有问题。
更新
既然我看到了 listToIterator
方法以及您是如何调用它的,问题就很清楚了。
该方法耗尽迭代器并将其(剩余)内容添加到一个新列表中……returns。 (这与它的名字完全相反!)
该方法没问题,但问题是您在 hasNext()
方法返回 false
的迭代器上调用它。换句话说,迭代器已经被耗尽了。
因此列表 returns 将为空。