嵌套的 While 循环没有正确计算两个文件

Nested While loop not counting two files correctly

我正在开发一个从命令行获取文件的程序。然后将该文件与文本文件进行比较,以查看其中是否包含某些单词。如果是这样,我希望它在每次找到特定单词时增加一个计数器。

我认为我在正确的轨道上,使用 while 循环使文件完成,并使用 contains 查看两个文件中是否存在单词。

但是,当我输出数字时,它只是文本文件中的单词总数!我不确定这是为什么。我是 java 的新手,所以我对此不太满意哈哈,如有任何帮助,我们将不胜感激

String fname = args[0];      // input file of text
    String words1;
    String words2;
    int numWords = 0;            // total number of words
    

    FileInputStream fileKeywords = new FileInputStream("Keywords.txt");
    Scanner keywords = new Scanner(fileKeywords);
    keywords.useDelimiter("[^a-zA-Z']+");  // delimiters are nonletters,'

    FileInputStream fileJava = new FileInputStream(args[0]);
    Scanner java = new Scanner(fileJava); 
    java.useDelimiter("[^a-zA-Z']+");  // delimiters are nonletters,'

    while (java.hasNext()) {
      words1 = java.next();
      while (keywords.hasNext()) {
        words2 = keywords.next();
        if (words2.contains(words1)) {
          numWords++;
        }
      }
    }

words2 一个单词 contains 这里是 'string contains' 代码。例如,"Hello".contains("ell") 为真。您的意图是 words2 所有 个关键字,但是..它不是。

while 循环?只需删除它并重新开始:

  • 首先,阅读 ALL 关键字(是的,这涉及一个单一的 non-nested while 循环)并将它们存储在擅长于此的数据类型中。 HashSet 似乎是最好的,但如果这让您害怕,如果关键字列表少于 ~1000 个左右的单词,ArrayList 就可以完成工作。
  • 然后循环一次,通过你的 'second scanner',扫描输入文件,(java 似乎是一个非常非常糟糕的名字 - 变量名非常重要)。确保您调用的 contains 调用是在某种集合类型(ArrayList 或 HashSet)上,而不是在字符串上。