统计文本单词频率
一、问题定义:
这次的工程任务为软件工程课程作业,旨在使用某种编程语言,完成统计文本文件中各单词出现的频率,并将前10的单词打印出来。问题的规模限于几个页面与后台的简单的数据交互。
二、可行性分析
该项目是基于Java语言,而java封装了大量各种处理方法,对文本文件,输入输出流、字符串处理等方面有着很大的优势,这样能够使具体处理函数透明化,故选择java语言。而其中字符串的split方法为该项目中处理字符串的主要函数,因此使得项目中关键的较长字符串处理成为可能,也是项目的规模得以较大的简化。
三、需求分析
该项目中为解决用户统计文本文件中单词的需求,设计了一个起始页面,提示用户上传需要统计分析的文本文件,这是系统会取得用户上传的文本文件,将其保存至服务器端,同时启动后台程序,读取上传文件,进行分析,得到结果,返回结果去前台页面,将处理后结果以表格形式展现出来。
四、总体设计
该项目为提高交互友好性,选择了JavaWeb形式,以常见的网页为程序起始页,使后台处理完全透明化。同时由于JavaWeb多见于大型项目,本次的项目也有较高的并发访问行与稳定性,并且能够长期同时提高服务。同时采用MVC的设计模式,使得控制层与业务逻辑层、视图层独立性提高,值得系统的模块化较高,有较好的后期维护性。
五、详细设计
该部分主要利用统一建模语言UML,建立该项目的模型与结构流程,确定每一个模块需要的算法及数据结构。
六、编码与单元测试
(一)Java后台代码部分
1、实体类mode.java
package com.xzp.unity;
/**
* 实体类
* @author Xzp
*
*/
public class Model {
private String[] s;//字符串数组
private int[] n;//整形数组
//get set方法
public String[] getS() {
return s;
}
public void setS(String[] s) {
this.s = s;
}
public int[] getN() {
return n;
}
public void setN(int[] n) {
this.n = n;
}
}2、工具类 Tools.java
package com.xzp.util;
import java.util.Scanner;
import com.xzp.unity.Model;
/**
* @author Xzp
*
*/
public class Tools {
/**
*
* @param s 目标字符串数组
* @param str 匹配字符串
* @return 匹配结果 字符串第一次出现的位置
*/
public int firstAppear(String[] s,String str) {
for (int i = 0; i < s.length; i