尝试计算列表文件中的单词数时出现运行时错误

时间:2017-04-27 09:48:50

标签: java multithreading count

我要做的是让我的程序列出文本文件中的单词以及某个单词打印出来的次数。

例如,如果我的文本文件包含此内容。

  

你好我的名字是约翰你好我的

输出显示

  

你好2

     

我的2

     

名称1

     

是1

     

john 1

我已经完成了它,因此打印了单词的数量而不是每个单词的频率,我创建了一个哈希映射,但我在第38行遇到了运行时错误。帮助将是感激的。

public class Mainstackquestion
    {

       public static void main(String args[])
       {
         if(args.length > 0)
         {
           for (String filename : args)
           {

             CheckFile(filename);
           }
         }
         else
         {

           CheckFile("C:\\Users\\User\\Desktop\\files\\1.txt"); 
         }

       }

 private static void CheckFile(String file)
 {
     Runnable tester = new WordCountstackquestion(file);
     Thread t = new Thread(tester);
     t.start();
 }
}

这是我的另一个班级

import java.io.File;
import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.Scanner;

public class WordCountstackquestion implements Runnable
{

   private String filename;
   public WordCountstackquestion(String filename)
   {
      this.filename = filename;
   }

   public void run()
   {
      int count = 0;
      try
      {
         Scanner in = new Scanner(new File(filename));

         while (in.hasNext())
         {
            in.next();
            count++;
         }
         System.out.println(filename + " : " + count);
      }
      catch (FileNotFoundException e)
      {
         System.out.println(filename + " was not found.");
      }

      HashMap<String, Integer> map = new HashMap<String, Integer>();
      {

      Scanner in = null;
    while (in.hasNext()) {
    String word = in.next();
          if (map.containsKey(word))
              map.put(word, map.get(word) + 1);
          else{
                  map.put(word, 1);
      }

      }

      for (String word : map.keySet()) {
        System.out.println(word + " " + map.get(word));
    }

   }

   }


}

2 个答案:

答案 0 :(得分:1)

你必须合并两个循环:

Range("AC8").Formula = "=COUNTIF('NCR''s'!$B$8:$B$" & NCRlastRow & ",'Design Baseline'!B8)"

因为如果你使用两个循环,第一个将读取整个文件,指针位于文件的末尾,所以在第二个循环中没有要读取的数据, while (in.hasNext()) { String word = in.next(); if (map.containsKey(word)) map.put(word, map.get(word) + 1); else{ map.put(word, 1); } count++; } System.out.println(filename + " : " + count); 返回false。 / p>

<强>更新 整个代码必须如下:

import java.io.File; import java.io.FileNotFoundException; import java.util.HashMap; import java.util.Scanner;

in.hasNext()

答案 1 :(得分:0)

从你的代码:

  1. Scanner in = null;
  2. while(in.hasNext()){
  3. 您将Scanner设置为null然后您正在尝试使用它,因此您将面临NullPointerException。您忘了再次初始化扫描仪。