代码之家  ›  专栏  ›  技术社区  ›  I_Respect_Women

嵌套的While循环未正确计数两个文件

  •  0
  • I_Respect_Women  · 技术社区  · 4 年前

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

    我认为我的思路是正确的,使用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++;
            }
          }
        }
    
    1 回复  |  直到 4 年前
        1
  •  0
  •   rzwitserloot    4 年前

    words2 一个字 . contains 以下是“字符串包含”代码。例如 "Hello".contains("ell") 这是真的。你的意图是 单词2 全部的 关键词,但是。。事实并非如此。

    那个while loop?只需删除它,然后重新开始:

    • 首先,阅读 全部的 关键字(是的,这涉及一个非嵌套while循环)并将它们存储在一个擅长于此的数据类型中。 HashSet 看起来最好不过如果你害怕的话, ArrayList 如果关键字列表少于1000个左右的单词,就可以完成这项工作。
    • 然后循环一次,通过“第二个扫描仪”,即扫描输入文件的扫描仪( java 这似乎是一个非常非常糟糕的名字——变量名非常重要)。确保 包含 调用是在某个集合类型(ArrayList或HashSet)上进行的,而不是在字符串上。