基于java:读写一个英文的txt文件,记录单词个数,并输出十个出现最多的单词及出现的个数;


 1 import java.io.FileNotFoundException;
 2 import java.io.FileReader;
 3 import java.io.IOException;
 4 
 5 class Word                                        //定义单词类
 6 {
 7     String value;                                  //具体的单词
 8     int geshu;                                     //出现的个数
 9     Word next;                                     //将单词链起来
10     public Word(String value,int geshu)            //带参构造函数
11     {
12         this.value=value;
13         this.geshu=geshu;
14         next=null;
15     }
16     public Word()                                   //空构造函数
17     {
18         this.value="";
19         this.geshu=0;
20         next=null;
21     }
22 }                                        
23 public class r {
24     public static void main(String args[]) throws IOException      //主函数
25     {
26         Word word=new Word();                                      //单词的链头
27         Word lian,xin;                                             
28         String str="";
29         FileReader f=new FileReader("d:/text.txt");                //读取英文文件
30         char[] c=new char[1];                                 //每次读取一个字母
31         int b=0;
32         boolean exist=false;                              //判断单词是否存在于  word 链中
33         while((b=f.read(c))!=-1)                              //每次读取一个字母直到最后
34         {
35             //如果字符为  换行、空格、单引号、双引号、逗号、句号  则为一个单词的结束及另一个单词的开始
36             if(String.valueOf(c).equals("\r")||String.valueOf(c).equals("\n")||String.valueOf(c).equals(" ")||String.valueOf(c).equals(",")||String.valueOf(c).equals(".")||String.valueOf(c).equals("\"")||String.valueOf(c).equals("'"))
37             {
38                 lian=word;
39                 while(lian!=null)            
40                 {
41                     if(lian.value.equalsIgnoreCase(str))           //如果单词在单词链中存在,则单词个数++
42                     {
43                         lian.geshu++;exist=true;break;
44                     }
45                     else
46                     {
47                         lian=lian.next;
48                     }
49                 }
50                 if(exist==false)                        //如果不存在,则在单词链中添加
51                 {
52                     xin=new Word(str,1);
53                     xin.next=word.next;
54                     word.next=xin;
55                     str="";
56                 }
57                 else
58                 {
59                     exist=false;
60                     str="";
61                 }
62             }
63             else                                      //单词
64             {
65                 str+=String.valueOf(c);
66             }
67         }
68         //   循环10次
69         for(int i=1;i<=10;i++)                   
70         {
71             xin=new Word("",0);
72             lian=word.next;
73             //找到单词链中个数最多的
74             while(lian!=null)
75             {
76                 if(lian.geshu>xin.geshu)
77                 {
78                     xin=lian;
79                 }
80                 lian=lian.next;
81             }
82             //输出单词链中个数最多的
83             System.out.println("弟"+i+"个 :"+xin.value+"个数:"+xin.geshu);
84             lian=word;
85             //删除单词链中单词个数最多的
86             while(lian.next!=null)
87             {
88                 if(lian.next.value.equalsIgnoreCase(xin.value))
89                 {
90                     lian.next=lian.next.next;
91                     break;
92                 }
93                 lian=lian.next;
94             }
95         }
96     }
97 }
思路:读写文件,
运用链表思想
通过空格、换行等字符设为单词的区分
每次通过遍历链表来查询链表中该单词是否已经存在
若存在,则单词个数加1;否则,在链表中添加此新单词
直到将文件读取完
查询次数最多的单词时
查询一个,则将此时最多的那个单词从链表中删除

注意:1、链表通过 类中的对象成员来链接
2、注意文本的换行为\r\t
3、注意判断单词是否存在时的处理
4、注意读写文件部分

 

智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告