/*设计思想:
1.将文本从文件中读取出来
2.在读取的过程中,将单词一个一个分离开来
if(取出来的单词以前取出来过)
{
计数加一
}else
{
将单词记录下来
}
3.输出出现次数最多的十个单词*/
1 package text;
2 import java.io.FileInputStream;//导入相应的包
3 import java.io.FileNotFoundException;
4 import java.io.IOException;
5 import java.util.Vector;
6 class Counter {//自定义一个类
7 private Vector vec=null;//此变量用来存放字符串数组即单词
8 private int a[]=null;//统计下表所对应的单词的个数
9 public Counter()//构造函数
10 {
11 vec=new Vector(1,1);
12 a=new int[1];
13 }
14 private void add(String str,int n)//添加新增单词的方法
15 {
16 vec.addElement(str);//添加新单词
17 int b[]=new int[n];//重新申请空间
18 for(int i=0;i<n-1;i++)//将原来记录的数据复制到新数组中
19 {
20 b[i]=a[i];
21 }
22 a=b;
23 a[n-1]=1;//将新添加单词的数量计为一
24 }
25 public void judge(String str)//判断是否传入的字符串即单词,是否存在
26 {
27 int flag=0;
28 int i=0;
29 for (i = 0; i <vec.size(); i++) {
30 if (vec.elementAt(i).toString().equalsIgnoreCase(str)) {//用忽略字母大小的方法进行比较
31 a[i]++;
32 flag=1; //设置了一个标志,以方便下面判断是否新添单词
33 break;//判断出有相同的单词,退出循环
34 }
35 }
36 if(flag==0)//判断是否新添单词
37 {
38 int n=i+1;
39 add(str,n);
40 }
41 }
42 void output()//控制输出
43 {
44 int max=0;
45 int flag=0;
46 for(int i=1;i<=10;i++)//输出十个
47 {
48 max=a[0];
49 for(int j=0;j<vec.size();j++)//找出所统计单词,出现最多的
50 {
51 if(max<a[j])
52 {
53 max=a[j];
54 flag=j;
55 }
56 }
57
58 System.out.print("序号"+1+":");
59 System.out.print(vec.elementAt(flag)+"的数量:");
60 System.out.println(a[flag]);
61 a[flag]=0;//将输出的单词的统计数量置为零
62
63 }
64 }
65 }
66 public class Text {//主类
67 public static void main(String[] args) throws IOException {
68 Counter counter=new Counter();
69 FileInputStream rf=new FileInputStream("D:/text.txt");//读取文件
70 int b;
71 char a;
72 String strr=new String();
73 while((b=rf.read())!=-1)//循环读取文件
74 {
75 a=(char)b;
76 if((a>='a'&&a<='z')||(a>='A'&&a<='Z'))//判断读取的是不是字母
77 {
78 strr=strr.concat(""+a);//字母连接成单词
79 }
80
81 else
82 {
83 counter.judge(strr);//单词的统计
84 strr=new String();
85 }
86
87 }
88 rf.close();//关闭输入流
89 counter.output();//输出结果
90 }
91}
//用时4个小时!