结对项目 - 词频统计Ⅱ

目的与要求


  • 代码复审练习
  • 结对练习
  • 编写单元测试
  • 基于上一个结对项目的结果,读取小文本文件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

转载于:https://www.cnblogs.com/hyating/p/5335221.html

1 创建L4 1项目 2 给定一个存放了三段文章的字符串数组 点击 “文件显示”按钮 将第一段文章内容显示在文本框中 再次点击“文件显示”按钮 将第二段文章显示在文本框中 以此类推 filestr[0] "Singles Day in China is the celebration or mourning of being unattached Started by students in Nanjing in the mid 1990s the date was selected in observation of its four solitary digits "; filestr[1] "While relatively obscure in most other countries Singles Day is likely to increase in prominence as more single men in China are unable to find female partners According to a recent study by the Chinese Academy of Social Sciences more than 24 million Chinese men could find themselves without spouses by 2020 "; filestr[2] "Celebrating Singles Day comes in many forms across the Asian nation and like Christmas and Valentine"s Day it has become a multi million dollar industry "; 注意:利用给定文章或者自选文章都可以 注意我们只讨论简单的情况 文章中只有逗号和句号两种特殊符号 2 点击“词频统计”按钮 系统将文本框中的字符串包括的单词及其个数统计出来 如图2所示 提示1:文章需要经过若干次处理 大小写处理 替换特殊符号处理 分隔单词处理 提示2:利用hashtable进行统计 单词作为key 个数作为value foreach string i in strword if ht Contains i ht Add i 1 ; else ht[i] int ht[i] + 1; 提示3:格式化输出统计结果 string str string Format "{0 15} {1 3}" de Key de Value ; txtFile Text txtFile Text +str + " r n";">1 创建L4 1项目 2 给定一个存放了三段文章的字符串数组 点击 “文件显示”按钮 将第一段文章内容显示在文本框中 再次点击“文件显示”按钮 将第二段文章显示在文本框中 以此类推 filestr[0] "Singles Day in China is [更多]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值