- 设计思想:
- 首先是统计字母出现的频率。首先定义一个方法,将文本文件里面的内容按行读出来存入一个字符串变量里面。之后按照要求将字符串里面的字母全部变为小写。创建两个数组,一个用来存储字符串里面的字母,一个用来存储对应的次数,同时设置一个变量来存放字母出现的总次数。为了方便按照出现频率进行排序,我将字母和对应的次数以及对应的频率存入了一个对象中。之后通过排序输出结果。
- 其次是统计单词出现的次数。首先同样是把文本文件的内容读入一个字符串中方便处理。为了方便将字符串分割为若干个单词,我将字符串里面的标点符号替换为空格,之后按照空格进行分割,得到若干个单词。后面的操作与之前的很相似,最终将单词与对应的次数存入了对象中,排序输出,并且可以指定输出次数排名前几的那些单词。
-
本次测试增加了一个无用词表。将文章里面的单词进行筛选,去掉一些无用词。初步构思将一个无用词表中的单词和文本文件里面的单词进行比较,若相同则不对其进行存储,便不会进行接下来的排序等操作,实现了单词的筛选。具体操作是使用之前的方法将文本文件读进一个字符串变量进行分割得到单词。再与指定的单词比较,便可以实现筛选。
package com.java.fmd;import java.io.File;import java.io.FileNotFoundException;import java.util.HashMap;import java.util.Scanner;import java.util.Set;public class danci { public static void main(String[] args) throws FileNotFoundException { File file=new File("piao.txt"); if(!file.exists()) { System.out.println("文件不存在"); return; } Scanner scanner=new Scanner(file); HashMaphashMap=new HashMap (); System.out.println("文章-----------------------------------"); while(scanner.hasNextLine()) { String line=scanner.nextLine(); System.out.println(line); String[] lineWords=line.split("\\W+"); Set wordSet=hashMap.keySet(); for(int i=0;i iterator=hashMap.keySet().iterator(); while(iterator.hasNext()) { String word=iterator.next(); System.out.printf("单词:%-12s 出现次数:%d\n",word,hashMap.get(word)); } System.out.println("程序结束--------------------------------"); }}
package com.java.fmd;import java.io.BufferedReader;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.util.HashMap;public class baifenbi { public static void main(String[] args) throws IOException { try { FileReader fr = new FileReader("piao.txt"); BufferedReader br = new BufferedReader(fr); HashMapmap = new HashMap (); String string =null; Integer count = 0; Integer total = 0; while ((string=br.readLine())!=null) { char[] ch = string.toCharArray(); total = total + ch.length; for (int i = 0; i < ch.length; i++) { ch[i] = Character.toLowerCase(ch[i]); count = map.get(ch[i]+""); if (count == null) { count = 1; }else { count++; } map.put(ch[i]+"", count); } } for (String str : map.keySet()) { System.out.println(str+":"+map.get(str)+" "+map.get(str)*1.0/total); } } catch (FileNotFoundException e) { e.printStackTrace(); } }}
import java.io.BufferedReader;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.text.DecimalFormat;import java.util.Map;import java.util.Scanner;import java.util.TreeMap;class zimu{ char zm; double ci; String pl; zimu() { zm=0; ci=0; pl=null; }}class dc{ String name; int num; dc() { name=null; num=-1; }}public class Main { public static void findword(String text) throws IOException{ @SuppressWarnings("resource") Scanner scan=new Scanner(System.in); int i=0; String[] array = {".",",","?","!"}; for (int i1 = 0; i1 < array.length; i1++) { text = text.replace(array[i1]," "); } String[] textArray = text.split(" "); Mapmap = new TreeMap (); for (int i1 = 0; i1 < textArray.length; i1++) { String key = textArray[i1]; //转为小写 String key_l = key.toLowerCase(); if(!"".equals(key_l)){ Integer num = map.get(key_l); if(num == null || num == 0){ map.put(key_l, 1); } else if(num > 0){ map.put(key_l, num+1); } } } for(@SuppressWarnings("unused") String e:map.keySet()){ // System.out.println("单词:"+e+" 次数:"+map.get(e)); i++; } dc [] z=new dc[i]; for(int m=0;m<=i-1;m++) { z[m]=new dc(); } int j=0; for(String e:map.keySet()) { if(z[j]!=null&&!nousejudge(e,"nouse.txt")) { z[j].name=e; z[j].num=map.get(e); } j++; } dc t=new dc(); for(int m=0;m<=i-1;m++) { for(int n=m;n<=i-1;n++) { if(z[m]!=null&&(z[m].num z[j].ci) { t=z[i]; z[i]=z[j]; z[j]=t; } } } for(i=0;i