一、地址链接
1、作业地址:https://edu.cnblogs.com/campus/nenu/2016CS/homework/2110
2、git仓库地址:https://git.coding.net/kefei101/wf.git
二、需求分析
通过对题目要求的分析,我共看到了以下需求:
!判断输入格式,共有6种输入格式,分别进入4种不同的处理方法,得到不同的排序输出。其中(3)(4)可算作一种,(5)(6)可算作一种。
(1)wf -c 文件名 进入直接读取txt方法,并顺序输出词频;
(2)wf -f 文件路径 进入读取文件夹的方法,再读取按照字典排序最靠前的txt文件,并按照字典排序输出单词词频;
(3)wf -c 文件名 -n 数量 进入直接读取txt方法,并按照词频和字典排序输出;
(4)wf -n 数量 -c 文件名 进入直接读取txt方法,并按照词频和字典排序输出;
(5)wf -f 文件路径 -n 数量 进入读取文件夹的方法,再读取按照字典排序最靠前的txt文件,并按照词频和字典排序输出;
(6)wf -n 数量 -f 文件路径 进入读取文件夹的方法,再读取按照字典排序最靠前的txt文件,并按照词频和字典排序输出.
三、功能设计
1、根据用户输入的参数格式,读取指向的文件或文件路径,统计得到txt文本文件的单词词频结果。
2、此处实现附加功能:在小程序中,可以任意输入多次,永久判断;输入格式中的首位单词 wf 即是保存该小程序的文件夹名,若将其放入不同的文件夹,只需将 wf 变为文件夹名即可。
注:为了避免中文乱码问题,我将注释及程序提示都改成英文显示。
四、设计实现
我共设计6个类,如图:
Test类:主类,负责接收输入格式的参数启动程序;
Jagger类:负责根据输入格式的参数不同,分别进入不同的处理方法;
ReadTxt类:负责读取txt文本文件,以及读取文件路径;
SortMap类:负责根据需求的跟能不同,进入不同的排序方法;
Compare类:实现Comparator接口,实现功能(3)--(6)的排序方式(先按照词频排序,再按照字典排序);
MyMap类:是SortMap类中功能三所需要用到的类,用自定义Map类实现list与Map转换的简单性。
5个类的相互关系为:
比较重要的函数有:
Jagger类 :JaggerFormat():判断输入格式,主要是逻辑
ReadTxt类:txtToString():读取txt文件,一行一行读取处理
directoryToTxt():读取文件路径,选择按字典排序最靠前的txt文件,进而调用txtToString()读取txt文件内容
SortMap类:orderPrint():顺序输出txt文件单词词频
sortMap(Map map):按字典顺序输出txt文件单词词频
sortMap(Map map,int num):先按词频排序,再按字典顺序排序
Compare类: compare():实现Comparator接口,重写Compare方法,指定排序方法
函数间的逻辑关系:JaggerFormat()----[directoryToTxt()]----txtToString()----orderPrint()/sortMap(Map map)/[sortMap(Map map,int num)----compare()]
五、测试运行
1、输入正确的格式,即可运行功能一二三
2、测试测试txt
六、重要代码展示
1、主方法main()测试:
1 import java.io.IOException; 2 import java.util.*; 3 4 /** 5 * Class main 6 * Author: houst 7 * Date: 2018/9/17 8 * Time: 15:50 9 */ 10 public class Test { 11 12 /** 13 * Main Method 14 * @param args args 15 * @throws IOException 16 */ 17 public static void main(String args[]) throws IOException { 18 19 while (true) { 20 Scanner scanner = new Scanner(System.in); 21 String order= scanner.nextLine();//Input format 22 //Judging the input format,entering different processing methods. 23 Jagger jagger = new Jagger(); 24 jagger.JaggerFormat(order); 25 26 } 27 28 } 29 30 }