20180912-3 词频统计

作业要求 20180912-3 词频统计

该作业的要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/6583

一、准备工作

      看题目大概读了一遍感觉好复杂,完全没有思路,就一个字难。而且里面专有名词不知道,像“代码要求在 coding.net 做版本控制。要求push&pull时使用git客户端,不允许使用web页面”。不明白版本控制是什么?git客户端又是什么?然后去百度了一下。

二、弄懂概念

        版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。

Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。

三、下载软件

  第一步: 申请coding.net账号并新建一个项目。

                 coding.net代码托管平台使用教程:https://blog.51cto.com/net881004/2068431

  第二步:下载、安装git和git客户端tortoisgit。

                git下载地址:https://git-scm.com/download

                tortoisgit下载地址:https://tortoisegit.org/download/

第三步:在coding.net上配置远程git ,具体请参见

                https://blog.csdn.net/gyy930324/article/details/54575246

                 coding.net及git的使用方式可参考: https://www.cnblogs.com/life-for-test/p/6284041.html

(ps平时编辑文档养成好习惯,文档做完就保存一下,要不忘记保存,还找不回来,真是心累,这次真是学乖了,以后打死都要记得保存文档)

四、功能实现的历程         

功能1 小文件输入。 为表明程序能跑,结果真实而不是迫害老五,请他亲自键
盘在控制台下输入命令。

为了评估老五的词汇量而不是阅读量,total一项中相同的单词不重复计数数,出现2
次的very计数1次。

因为用过控制台和命令行,你早就知道,上面的">"叫做命令提示符,是操作系统的一部分,而不是你的程序的一部分。

此功能完成后你的经验值+10.

重要代码:

               

//单行统计
	public static void Line(String arg) {//单行输入判断
		List<String> list=new ArrayList<String>();//用列表存储单词
		 String[] arr = arg.split("[^a-zA-Z]");  //选择有字母的单词
		for(String word:arr){      //从arr中拿出word
			list.add(word);        //添加到列表中
		}
		Sort(list);
	}
知识兔

 

  

功能2 支持命令行输入英文作品的文件名,请老五亲自录入。

此功能完成后你的经验值+30. 输入文件最大不超过40MB. 如果你的程序中途崩
了,会被老五打脸,不增加经验值。

重要代码:

//单个文件统计
	public static void Txt(String arg) throws IOException {//文件输入判断
		BufferedReader br=new BufferedReader(new 
                FileReader("D:/Project/JAVA/"+arg+".txt"));
		List<String> list=new ArrayList<String>();//用列表存储单词
		 String readLine = null;
		while((readLine=br.readLine())!=null){
	    String[] arr1 = readLine.split("[^a-zA-Z]");  //选择有字母的单词
	    for(String word:arr1){      //从arr1中拿出word
	    	 if (word.length() != 0) {  //去除长度为0的行  
	    			list.add(word);  
	            }

	    	list.add(word);        //添加到列表中
		}
	}
	    SortOne(list);
	}
知识兔

  

 功能3 支持命令行输入存储有英文作品文件的目录名,批量统计。

重要代码:

//多个文件统计
	public static void Ptxt(String arg) throws IOException {//文件批量输入判断
		BufferedReader br=new BufferedReader(new FileReader(arg));
		List<String> list=new ArrayList<String>();//用列表存储单词
	    while(br.readLine()!=null){
	    String[] arr2 = br.readLine().split("[^a-zA-Z]");  //选择有字母的单词
	    for(String word:arr2){      //从arr1中拿出word
			list.add(word);        //添加到列表中
		}
	}
	    SortOne(list);
	}
知识兔

  

功能4 从控制台读入英文单篇作品,这不是为了打脸老五,而是为了向你女朋
友炫酷,表明你能提供更适合嵌入脚本中的作品(或者如她所说,不过是更灵活
的接口)。如果读不懂需求,请教师兄师姐,或者 bing: linux 重定向,尽管
这个功能在windows下也有,搜索关键词中加入linux有利于迅速找到。

重要代码:

public static void TextCount() throws Exception {

	BufferedReader br = new BufferedReader(new 
       InputStreamReader(System.in));//从字符输入流中读取文本并缓冲字符
	//BufferedReader br = new BufferedReader(new 
       FileReader("D:/Project/JAVA/WF1/src/WF/" + "a1.txt"));//eclipse测试用
       List<String> lists = new ArrayList<String>();  //存储过滤后单词的列表  
      String readLine = null;
      while ((readLine = br.readLine()) != null) {
        String[] wordsArr1 = readLine.split("[^a-zA-Z]");  //过滤出只含有字母的  
        for (String word : wordsArr1) {
            if (word.length() != 0) {  //去除长度为0的行  
                lists.add(word);
            }
        }
    }
知识兔

      在所有功能实现前,我思考了好久,应该怎样下手,可是想了半天,就选择那门语言,想选择C语言,可是感觉题目功能也不少,要是用C语言,工程可能会大,而java是面向对象的,实现起来应该会简单一些,然而java自己已经忘的差不多了,打算先把java 学习一遍在开始编程,可是师兄看到我一直在看书,建议我一边学一边写,只有在实践中才能知道那些知识要用到,而且效率高,所以整个工程都是在边写边学中进行的。

功能一:

  1. 忘记怎么输入一串字符,按空格取每个单词的操作,所以复习了谭浩强的《C语言程序设计》。
  2. 忘记正则表达式,查了正则表达式的写法
  3. 查了java 中列表怎样定义

功能二:

        在控制台里输入一个文件名然后读取文件里的内容,格式和表达式的书写。

功能三: 

          一开始感觉功能二和功能三是一样的,后来仔细读了作业要求,功能二和功能三差在了是读一个文件还是多个(个人理              解),所以在写功能三就把读入一个文件格式去掉了。

功能四:

          一开始功能四就没有看懂,尤其是上面功能二和功能三都感觉一样,这个功能四简直了,我打算先把前三个功能先实现,时间允许的情况下,在来搞功能四。

知识链接:

        一开始三个功能完成后,总是感觉少了什么,运行程序才发现少了排序,排序就想到了使用HashMap还是TreeMap,两者区别:HashMap通过hashcode对其内容进行快速查找,而 TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。

  

计算机