1 package fengzhuang;
  2 import java.io.BufferedReader;
  3 import java.io.File;
  4 import java.io.FileInputStream;
  5 import java.io.FileReader;
  6 import java.io.IOException;
  7 import java.io.InputStreamReader;
  8 import java.util.Scanner;
  9 
 10     class Word                                       
 11     {
 12         String value;                                 
 13         int geshu;                                    
 14         static Word next;                                    
 15         public Word(String value,int geshu)            
 16         {
 17             this.value=value;
 18             this.geshu=geshu;
 19             next=null;
 20         }
 21         public Word()                                   
 22         {
 23             this.value="";
 24             this.geshu=0;
 25             next=null;
 26         }
 27     }    
 28     public class Ceshi {
 29     public static void main(String[] args) {
 30         System.out.println("请输入您想完成的功能:");
 31         int i=0;
 32     for(int n=1;n<10;n++)
 33         {System.out.println("1:统计字母;2:统计单词;3:指定单词");
 34         
 35         Scanner scan=new Scanner(System.in);
 36         i=scan.nextInt();
 37         if(i==1)
 38         {
 39             Zimu();
 40         }
 41         if(i==2)
 42         {
 43             try {
 44                 Quan();
 45             } catch (IOException e) {
 46                 // TODO Auto-generated catch block
 47                 e.printStackTrace();
 48             }
 49         }
 50         if(i==3)
 51         {
 52             try {
 53                 Danci();
 54             } catch (IOException e) {
 55                 // TODO Auto-generated catch block
 56                 e.printStackTrace();
 57             }
 58         }
 59     System.out.println("是否退出 退出0,不退出-其他");
 60     n=scan.nextInt();
 61     if(n==0)
 62     {
 63         break;
 64     }
 65         }
 66     }
 67     static void Zimu()
 68     {
 69          try {
 70              char shu[] = new char[10000000];
 71              char zimu[] = new char[52];
 72              int j=0;
 73              int count[]=new int[52];
 74              String pathname="E:\\o1.txt";
 75              File filename=new File(pathname);
 76              InputStreamReader reader=new InputStreamReader(new FileInputStream(filename));
 77              BufferedReader br=new BufferedReader(reader);
 78              String line[]=new String[100];;    
 79              for(int i=0;i<line.length;i++){
 80              line[i]=br.readLine();    
 81              }
 82              br.close();
 83              int k=0;
 84               while(line[k]!=null) {
 85                   for(int i=0;i<line[k].length();i++) {                                
 86                        shu[j]=line[k].charAt(i);
 87                        j++;                     
 88                   }
 89                   k++;
 90              }    
 91              for(int i=0;i<shu.length;i++) {
 92                   switch(shu[i]) {
 93                   case 'a':zimu[0]='a';count[0]++;break;
 94                   case 'b':zimu[1]='b';count[1]++;break;
 95                   case 'c':zimu[2]='c';count[2]++;break;
 96                   case 'd':zimu[3]='d';count[3]++;break;
 97                   case 'e':zimu[4]='e';count[4]++;break;
 98                   case 'f':zimu[5]='f';count[5]++;break;
 99                   case 'g':zimu[6]='g';count[6]++;break;
100                   case 'h':zimu[7]='h';count[7]++;break;
101                   case 'i':zimu[8]='i';count[8]++;break;
102                   case 'j':zimu[9]='j';count[9]++;break;
103                   case 'k':zimu[10]='k';count[10]++;break;
104                   case 'l':zimu[11]='l';count[11]++;break;
105                   case 'm':zimu[12]='m';count[12]++;break;
106                   case 'n':zimu[13]='n';count[13]++;break;
107                   case 'o':zimu[14]='o';count[14]++;break;
108                   case 'p':zimu[15]='p';count[15]++;break;
109                   case 'q':zimu[16]='q';count[16]++;break;
110                   case 'r':zimu[17]='r';count[17]++;break;
111                   case 's':zimu[18]='s';count[18]++;break;
112                   case 't':zimu[19]='t';count[19]++;break;
113                   case 'u':zimu[20]='u';count[20]++;break;
114                   case 'v':zimu[21]='v';count[21]++;break;
115                   case 'w':zimu[22]='w';count[22]++;break;
116                   case 'x':zimu[23]='x';count[23]++;break;
117                   case 'y':zimu[24]='y';count[24]++;break;
118                   case 'z':zimu[25]='z';count[25]++;break;
119                   case 'A':zimu[26]='A';count[26]++;break;
120                   case 'B':zimu[27]='B';count[27]++;break;
121                   case 'C':zimu[28]='C';count[28]++;break;
122                   case 'D':zimu[29]='D';count[29]++;break;
123                   case 'E':zimu[30]='E';count[30]++;break;
124                   case 'F':zimu[31]='F';count[31]++;break;
125                   case 'G':zimu[32]='G';count[32]++;break;
126                   case 'H':zimu[33]='H';count[33]++;break;
127                   case 'I':zimu[34]='I';count[34]++;break;
128                   case 'J':zimu[35]='G';count[35]++;break;
129                   case 'K':zimu[36]='K';count[36]++;break;
130                   case 'L':zimu[37]='L';count[37]++;break;
131                   case 'M':zimu[38]='M';count[38]++;break;
132                   case 'N':zimu[39]='N';count[39]++;break;
133                   case 'O':zimu[40]='O';count[40]++;break;
134                   case 'P':zimu[41]='P';count[41]++;break;
135                   case 'Q':zimu[42]='Q';count[42]++;break;
136                   case 'R':zimu[43]='R';count[43]++;break;
137                   case 'S':zimu[44]='S';count[44]++;break;
138                   case 'T':zimu[45]='T';count[45]++;break;
139                   case 'U':zimu[46]='U';count[46]++;break;
140                   case 'V':zimu[47]='V';count[47]++;break;
141                   case 'W':zimu[48]='W';count[48]++;break;
142                   case 'X':zimu[49]='X';count[49]++;break;
143                   case 'Y':zimu[50]='Y';count[50]++;break;
144                   case 'Z':zimu[51]='Z';count[51]++;
145                   }
146              }    
147              int ci=0;
148              int sum=0;
149              System.out.println("短文中各字母出现情况统计如下:");
150              for(int i=0;i<52;i++)
151              {
152                  if(count[i]!=0) {
153                      ci++;
154                      sum+=count[i];
155                      System.out.println(ci+".字母"+zimu[i]+"的出现次数是:"+count[i]);
156                      }
157              }   
158              System.out.println("字母共计:"+sum+"个");
159          }catch (Exception e) {
160              e.printStackTrace();
161          }
162     }
163     static void Quan()throws IOException
164     {
165           Word word=new Word();                                      //单词的链头
166             Word lian,xin;                                             
167             String str="";
168             FileReader f=new FileReader("E:\\o1.txt");                //读取英文文件
169             char[] c=new char[1];                                 //每次读取一个字母
170             int b=0;
171             boolean exist=false;                              //判断单词是否存在于  word 链中
172             while((b=f.read(c))!=-1)                              //每次读取一个字母直到最后
173             {
174                 //如果字符为  换行、空格、单引号、双引号、逗号、句号  则为一个单词的结束及另一个单词的开始
175                 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("'"))
176                 {
177                     lian=word;
178                     while(lian!=null)            
179                     {
180                         if(lian.value.equalsIgnoreCase(str))           //如果单词在单词链中存在,则单词个数++
181                         {
182                             lian.geshu++;exist=true;break;
183                         }
184                         else
185                         {
186                             lian=lian.next;
187                         }
188                     }
189                     if(exist==false)                        //如果不存在,则在单词链中添加
190                     {
191                         xin=new Word(str,1);
192                         xin.next=word.next;
193                         word.next=xin;
194                         str="";
195                     }
196                     else
197                     {
198                         exist=false;
199                         str="";
200                     }
201                 }
202                 else                                      //单词
203                 {
204                     str+=String.valueOf(c);
205                 }
206             }
207             int N=20;
208             for(int i=1;i<=N;i++)                   
209             {
210                 xin=new Word("",0);
211                 lian=word.next;
212                 //找到单词链中个数最多的
213                 while(lian!=null)
214                 {
215                     if(lian.geshu>xin.geshu)
216                     {
217                         xin=lian;
218                     }
219                     lian=lian.next;
220                 }
221                 //输出单词链中个数最多的
222                 System.out.println("第"+i+"个 :"+xin.value+"个数:"+xin.geshu);
223                 lian=word;
224                 //删除单词链中单词个数最多的
225                 while(lian.next!=null)
226                 {
227                     if(lian.next.value.equalsIgnoreCase(xin.value))
228                     {
229                         lian.next=lian.next.next;
230                         break;
231                     }
232                     lian=lian.next;
233                 }
234             }
235         }
236     static void Danci()throws IOException
237     {
238         Word word=new Word();                                      //单词的链头
239         Word lian,xin;                                             
240         String str="";
241         FileReader f=new FileReader("E:\\o1.txt");                //读取英文文件 
242         char[] c=new char[1];                                 //每次读取一个字母
243         int b=0;
244         boolean exist=false;                              //判断单词是否存在于  word 链中
245         while((b=f.read(c))!=-1)                              //每次读取一个字母直到最后
246         {
247             //如果字符为  换行、空格、单引号、双引号、逗号、句号  则为一个单词的结束及另一个单词的开始
248             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("'"))
249             {
250                 
251                 lian=word;
252                 while(lian!=null)            
253                 {
254 
255                     if(lian.value.equalsIgnoreCase(str))           //如果单词在单词链中存在,则单词个数++
256                     {
257                         lian.geshu++;exist=true;break;
258                     }
259                     else
260                     {
261                         if(str.equals("a")||str.equals("the")||str.equals("and"))
262                         {
263                             break;
264                         }
265                         lian=lian.next;
266                     }
267                     
268                 }
269 
270                 if(exist==false)                        //如果不存在,则在单词链中添加
271                 {
272                     xin=new Word(str,1);
273                     xin.next=word.next;
274                     word.next=xin;
275                     str="";
276                 }
277                 else
278                 {
279                     exist=false;
280                     str="";
281                 }
282             }
283             else                                      //单词
284             {
285                 str+=String.valueOf(c);
286             }
287         }
288      
289         
290         //   循环10次
291         System.out.println("请输入您想查询的前几个出现此处最多的单词");
292         Scanner scan=new Scanner(System.in);
293         int N=scan.nextInt();
294         for(int i=1;i<=N;i++)                   
295         {
296             lian=Word.next;
297             xin=new Word("",0);
298             lian=word.next;
299             //找到单词链中个数最多的
300             while(lian!=null)
301             {
302                 if(lian.geshu>xin.geshu)
303                 {
304                     xin=lian;
305                 }
306                 lian=lian.next;
307             }
308             //输出单词链中个数最多的
309             System.out.println("第"+i+"个 :"+xin.value+"个数:"+xin.geshu);
310             lian=word;
311             //删除单词链中单词个数最多的
312             while(lian.next!=null)
313             {
314                 if(lian.next.value.equalsIgnoreCase(xin.value))
315                 {
316                     lian.next=lian.next.next;
317                     break;
318                 }
319                 lian=lian.next;
320             }
321         }
322     }
323 
324     }