写一个程序,分析一个文本文件(英文文章)中各个词出现的频率,并且把频率最高的十个词打印出来。...

 /*设计思想:
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个小时!

 

转载于:https://www.cnblogs.com/scl1314/p/3577298.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值