【问题标题】:Removing common English words with a file用文件删除常用英语单词
【发布时间】:2020-01-18 10:55:55
【问题描述】:

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

termsList 的私有 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


【解决方案1】:

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

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

  2. terms 列表一开始是空的

  3. 您的listToIterator 方法有问题。


更新

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

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

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

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

【讨论】:

  • 我已经更新了上面的 listToIterator 方法——请您检查一下是否正确?
  • 此外,在此方法开始时检查(打印输出)的 List 术语不为空。
  • 哦!那么你能帮我弄清楚我可以如何以不同的方式做到这一点吗?
  • 嗯......我真的不明白你在这里想要做什么。你为什么打电话给listToIterator?您已经从term 中删除了常用词。 IMO,真正的解决方案是根本不打电话给listToIterator
  • 你可以问,但我可能不会回答。我认为您需要开始学习调试自己的代码。
猜你喜欢
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 2019-08-03
  • 2019-12-07
  • 2020-05-12
  • 1970-01-01
  • 1970-01-01
  • 2018-05-23
相关资源
最近更新 更多