java - 用文件删除常见英语单词

标签 java string list iterator java.util.scanner

此方法从术语列表中删除常见英语单词 - 我要删除“commonWords.txt”中找到的所有单词。此外,此方法不应引发异常。

terms字符串的私有(private)列表

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; 
  }

最佳答案

除了虚假的异常处理之外,您问题中的代码没有任何问题。这留下了三种可能性:

  1. 您尝试读取的 commonWords.txt 文件不在执行程序时的工作目录中。

  2. 术语列表一开始为空

  3. 您的 listToIterator 方法有问题。

<小时/>

更新

现在我看到了 listToIterator 方法以及您如何调用它,问题就清楚了。

该方法耗尽迭代器并将其(剩余)内容添加到一个新列表中......它返回该列表。 (这与它的名字恰恰相反!)

该方法没问题,但问题是您在 hasNext() 方法返回 false 的迭代器上调用它。换句话说,迭代器已经被耗尽。

因此它返回的列表将为空。

关于java - 用文件删除常见英语单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59799877/

相关文章:

java - 如何将多个对象实例化到列表中?

C# 比较两个相同对象类型的列表

java - 在 Java 中使用 SPARQL 查找人员的位置

java - WSO2 API Manager : chpasswd. sh 在使用外部数据库时不起作用

java - EWS-Java-API - EmailMessage.send 到 java.lang.NullPointerException : format == null

javascript - 将 JSON 字符串反序列化为列表数组

java - 与 while 循环相关的变量声明的位置

java - 如何重新初始化数据包的缓冲区?

c++ - 如何截断字符串数组? C++

python - 按条件连接列表中的字符串