结对项目 - 词频统计Ⅱ

目的与要求


  • 代码复审练习
  • 结对练习
  • 编写单元测试
  • 基于上一个结对项目的结果,读取小文本文件A_Tale_of_Two_Cities.txt 或者 大文本文件Gone_with_the_wind.txt,统计某一指定单词在该文本文件中出现的频率。
  • 命令行格式: 提示符> Myapp.exe -f filename.txt -w word (PS:C++ 程序,Java 程序输出方式类似)

  • 解释:
    • 选项 -f 表示打开某一文件
    • 选项 -w 表示统计其后单词在打开的文件中的频率

 


 

 

 

详细内容


 

  1. 思路:

    基于上一个 结对项目 - 词频统计 的程序和结果,加入了输入的语句,用户可以通过输入所要查询的文件路径及文件名,可以查询到该文本中某一单词的出现频率。

  2. 分工:

    本次主要是小伙伴带着我开展对Java的学习。

  • 源代码

 

import java.util.*;
import java.util.Map.Entry;
import java.io.*;

public class WordCount3
{
    public static void main(String[] args)  throws Exception  
    { 
        Map<String,Integer> map=new HashMap<String,Integer>();
        System.out.println("请输入所要查询的文件路径及文件名:");
        Scanner bs=new Scanner (System.in);
        String files=bs.nextLine();
                   
        File file = new File(files+".txt");
        FileReader reader = new FileReader(file);
        int fileLen = (int)file.length();
        char[] chars = new char[fileLen];
        reader.read(chars);
        String text = String.valueOf(chars);

        text = text.replaceAll("[\\‘‘.“”,,]", "");  //删除字符串中的标点符号
        text = text.toLowerCase();//将文字全部转换为小写
        StringTokenizer take =  new StringTokenizer(text); //StringTokenizer是一个用来分隔String的应用类
        String word = new String();
        int i =0;
        while( take.hasMoreElements() )
        {
            
            word=take.nextToken() ;
            if(word.length()>=4)
            { 
                Integer count = map.get(word);
                if(count == null)
                {
                    map.put(word,1);
                }
                else{
                map.put(word,++count);
                }
            }
            i++;
        }
        
        //排序
        List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
        Collections.sort( list, new Comparator<Map.Entry<String, Integer>>()
        {     
            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) 
            {     
                if(o1.getValue()<o2.getValue())
                  return 1;
                else if(o1.getValue()>o2.getValue())
                  return -1;
                else
                  return(o1.getKey().compareTo(o2.getKey()));
            }
        } );
           
           System.out.println("请输入要查询的单词:");
           Scanner sc=new Scanner(System.in);
           String scword=sc.nextLine().toLowerCase();
           for(Map.Entry<String,Integer> entry : map.entrySet())
           {
                  if(entry.getKey().equalsIgnoreCase(scword)) 
                  {
                      System.out.println(scword+"在该文本中出现"+ entry.getValue()+"次\r\n已保存入指定目录文本中");
                      File outfile = new File("D:\\Software\\SorfwareTest\\Result2.txt"); 
                      try  
                      { 
                          if (file.exists()) outfile.delete(); 
                          BufferedWriter bw = new BufferedWriter(new FileWriter(outfile)); 
                          StringBuffer out = new StringBuffer(); 
                           out.append(scword+"在该文本中出现"+ entry.getValue()+"次\r\n");  
                           bw.write(out.toString()); 
                           bw.flush(); 
                           bw.close(); 
                           }  
                           catch (IOException e) 
                           { 
                                e.printStackTrace(); 
                           }
                          }
               else  continue;
           }
           
          
        
        //输出TXT
        

   }
  
  }

 

  • 运行结果

打开文本文件

  • 小结

    本次的作业主要由小伙伴编辑,我学习并试着上手实际操作,  真·学海无涯

  • 源代码Github地址

https://github.com/Jennyhyt/My-source-code/blob/master/TeamWork-WFS%E2%85%A1.cpp

posted @ 2016-03-29 23:26  喵呜喵喵  阅读(224)  评论(1编辑  收藏  举报