统计一篇文章的单词数量,并且输出频率前10单词的数量

程序功能:分析一个文本文件中各个词出现的频率,并且把频率最高的10个词打印出来。文本文件大约是30KB~300KB大小。

判断语言:English

判断文章:The Old Man And the Sea (老人与海)

文件大小:166KB


程序思路:

1、打开文件流

2、使用使用循环遍历文件流中的每个单词

3、判断该单词是否已出现过,未出现就添加进去,出现过就将wordsNumber下标对对应的值加1

4、输出频率前10单词的数量

5、关闭文件流




//导入相应的包
	import java.io.FileInputStream;
	import java.io.FileNotFoundException;
	import java.io.IOException;
	import java.util.Vector;
		
	//自定义一个类
	class Counter {
		private Vector V=null;//此变量用来存放字符串数组即单词
		private int wordsNumber[]=null;//统计下标所对应的单词的个数
		
		public Counter()//构造函数
	    {
	        V = new Vector(1,1);
	        wordsNumber = new int[1];
	    }
		
	    private void add(String str,int n)//添加新增单词的方法
	    {
	        V.addElement(str);//添加新单词
	        int b[]=new int[n];//重新申请空间
	        for(int i=0;i<n-1;i++)//将原来记录的数据复制到新数组中
	        {
	            b[i]=wordsNumber[i];
	        }
	        wordsNumber=b;
	        wordsNumber[n-1]=1;//将新添加单词的数量计为一
	    }
	    public void judge(String str)//判断是否传入的字符串即单词,是否存在
	    {
	        int flag=0;
	        int i=0;
	        for (i = 0; i <V.size(); i++) {
	            if (V.elementAt(i).toString().equalsIgnoreCase(str)) {//用忽略字母大小的方法进行比较
	                wordsNumber[i]++;
	                flag=1;    //设置了一个标志,以方便下面判断是否新添单词
	                break;//判断出有相同的单词,退出循环
	            }
	            }
	        if(flag==0)//判断是否新添单词
	        {
	            int n=i+1;
	            add(str,n);
	        }
    }
    void output()//控制输出
    {
        int max=0;
        int flag=0;
        for(int i=1;i<=11;i++)//输出十个
        {
            max=wordsNumber[0];
            for(int j=0;j<V.size();j++)//找出所统计单词,出现最多的
            {
            	if(max<wordsNumber[j])
                {
                    max=wordsNumber[j];
                    flag=j;
                }
            }
          
                System.out.print("单词数量第"+i+"名:   ");
                System.out.print(V.elementAt(flag+1)+"的个数为:");
                System.out.println(wordsNumber[flag]);
                wordsNumber[flag]=0;//将输出的单词的统计数量置为零
           
        }
    }
}
public class CoutWords {//主类
    public static void main(String[] args) throws IOException {
        Counter counter=new Counter();
         FileInputStream rf=new  FileInputStream("D:lryh.txt");//读取文件
         int b;
         char wordsNumber;
         String strr=new String();
         while((b=rf.read())!=-1)//循环读取文件
         {
             wordsNumber=(char)b;
             if((wordsNumber>='a'&&wordsNumber<='z')||(wordsNumber>='A'&&wordsNumber<='Z'))//判断读取的是不是字母
             {
                 strr=strr.concat(""+wordsNumber);//字母连接成单词
             }
             else
             {
             
                 counter.judge(strr);//单词的统计
                 strr=new String();
               
             }
         }
         rf.close();//关闭输入流
         counter.output();//输出结果
        }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值