11.4课堂测试 文件的读取单词字母计数排序

一、

输出某个英文文本文件中 26 字母出现的频率,由高到低排列,并显示字母出现的百分比,精确到小数点后面两位。

  1 package test;
  2 
  3 import java.io.*;
  4 
  5 public class Word {
  6     
  7     public static void read() {
  8         String string =null;
  9         
 10         int a[]=new int[52];
 11         char b[]=new char[52];
 12         b[0]='a';
 13         b[1]='b';
 14         b[2]='c';
 15         b[3]='d';
 16         b[4]='e';
 17         b[5]='f';
 18         b[6]='g';
 19         b[7]='h';
 20         b[8]='i';
 21         b[9]='j';
 22         b[10]='k';
 23         b[11]='l';
 24         b[12]='m';
 25         b[13]='n';
 26         b[14]='o';
 27         b[15]='p';
 28         b[16]='q';
 29         b[17]='r';
 30         b[18]='s';
 31         b[19]='t';
 32         b[20]='u';
 33         b[21]='v';
 34         b[22]='w';
 35         b[23]='x';
 36         b[24]='y';
 37         b[25]='z';
 38         b[26]='A';
 39         b[27]='B';
 40         b[28]='C';
 41         b[29]='D';
 42         b[30]='E';
 43         b[31]='F';
 44         b[32]='G';
 45         b[33]='H';
 46         b[34]='I';
 47         b[35]='J';
 48         b[36]='K';
 49         b[37]='L';
 50         b[38]='M';
 51         b[39]='N';
 52         b[40]='O';
 53         b[41]='P';
 54         b[42]='Q';
 55         b[43]='R';
 56         b[44]='S';
 57         b[45]='T';
 58         b[46]='U';
 59         b[47]='V';
 60         b[48]='W';
 61         b[49]='X';
 62         b[50]='Y';
 63         b[51]='Z';
 64         
 65         
 66         try {
 67             // 在给定从中读取数据的文件名的情况下创建一个新 FileReader
 68             FileReader fr = new FileReader("D:\\QQ文件\\Harry Potter and the Sorcerer's Stone.txt");
 69 
 70             // 创建一个使用默认大小输入缓冲区的缓冲字符输入流
 71             BufferedReader br = new BufferedReader(fr);
 72 
 73             while (null != (string = br.readLine())) {
 74                 int sum=string.length();
 75                 for(int i=0;i<sum;i++)
 76                 {
 77                     for(int j=0;j<52;j++)
 78                     {
 79                         if(string.charAt(i)==b[j]) {
 80                             a[j]++;
 81                         }
 82                     }
 83                 }
 84             }
 85             fr.close();
 86             br.close();
 87         } catch (Exception ee) {
 88             ee.printStackTrace();
 89         }
 90         
 91         int max=0;
 92         double s=0;
 93         for(int i=0;i<52;i++)
 94         {
 95             s+=a[i];
 96         }
 97         System.out.println("总次数"+s);
 98         for(int j=0;j<52;j++)
 99         {
100             int c=0;
101             for(int i=0;i<52;i++)
102             {
103                 
104                 if(a[i]>max)
105                 {
106                     max=a[i];
107                     c=i;
108                 }
109                 if(i==51)
110                 {
111                     System.out.print(b[c]+"  次数   "+a[c]+"   出现率   ");
112                     System.out.println(String.format("%.2f", a[c]/s*100)+"%");
113                     a[c]=0;
114                     c=0;
115                     max=0;
116                 }
117             }
118         }
119     }
120     
121 public static void main(String[] args) {
122     read();
123 }
124 }

二、输出单个文件中的前 N 个最常出现的英语单词。 作用:一个用于统计文本文件中的英语单词出现频率的控制台程序; 单词:以英文字母开头,由英文字母和字母数字符号组成的字符串视为一个单词。单词以分隔符分割且不区分大小写。在输出时,所有单词都用小写字符表示。

 1 package test;
 2 
 3 import java.io.*;
 4 import java.io.FileNotFoundException;
 5 import java.io.IOException;
 6 import java.util.*;
 7 import java.util.Map.Entry;
 8 
 9 public class Test {
10 public static void main(String[] args) {
11     
12     
13     Scanner sca=new Scanner(System.in);
14     int n;
15     n=sca.nextInt();
16     long t1 = System.currentTimeMillis();
17     String s;  
18     String fileName1 = "D:\\QQ文件\\Harry Potter and the Sorcerer's Stone.txt";  
19     BufferedReader br = null;
20     try {
21         br = new BufferedReader(new FileReader(fileName1));
22         StringBuffer sb = new StringBuffer(); 
23         //将文件内容存入StringBuffer中  
24         while((s = br.readLine()) != null) {  
25             sb.append(s);  
26         }  
27         //不区分大小写
28         String str = sb.toString().toLowerCase();
29       //分隔字符串并存入数组  (以,。空格分割)
30         String[] elements = str.split("[,.\\s]");  
31         int count = 0;  
32         Map<String, Integer> myTreeMap = new TreeMap<String, Integer>();  
33         //遍历数组将其存入Map<String, Integer>中  
34         for(int i = 0; i < elements.length; i++) {  
35             if(myTreeMap.containsKey(elements[i])) {  
36                 count = myTreeMap.get(elements[i]);  
37                 myTreeMap.put(elements[i], count + 1);  
38             }  
39             else {  
40                 myTreeMap.put(elements[i], 1);  
41             }  
42         }              
43         System.out.println("单词统计的结果如下");  
44         //将map.entrySet()转换成list  
45         List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(myTreeMap.entrySet());  
46         //通过比较器实现排序  
47         Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {  
48             //降序排序  
49             public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {  
50                 return o2.getValue().compareTo(o1.getValue());  
51             }  
52         });  
53         int num = 1;  
54         for(Map.Entry<String, Integer> map : list) {  
55             if(num <= n) {  
56                 System.out.println("出现次数第" + num + "的单词为:" + map.getKey() + ",出现频率为" + map.getValue() + "次");
57                 num++;  
58             }  
59             else break;  
60         }  
61     } catch (FileNotFoundException e) {
62         e.printStackTrace();
63     } catch (IOException e) {
64         e.printStackTrace();
65     }finally{
66         try {
67             br.close();
68         } catch (IOException e) {
69             e.printStackTrace();
70         }  
71     }
72 }
73 }

 三、要求3:输出单个文件中的前 N 个最常出现的英语单词。 功能1:输出文件中所有不重复的单词,按照出现次数由多到少排列,出现次数同样多的,以字典序排列。 功能2:指定文件目录,对目录下每一个文件执行 功能1的操作。 功能3:指定文件目录, 但是会递归遍历目录下的所有子目录,每个文件执行功能1的做操。

 1 package test;
 2 
 3 import java.io.*;
 4 import java.io.FileNotFoundException;
 5 import java.io.IOException;
 6 import java.util.*;
 7 import java.util.Map.Entry;
 8 
 9 public class Test {
10 public static void main(String[] args) {
11     
12     
13     Scanner sca=new Scanner(System.in);
14     int n;
15     n=sca.nextInt();
16     long t1 = System.currentTimeMillis();
17     String s;  
18     String fileName1 = "D:\\QQ文件\\Harry Potter and the Sorcerer's Stone.txt";  
19     BufferedReader br = null;
20     try {
21         br = new BufferedReader(new FileReader(fileName1));
22         StringBuffer sb = new StringBuffer(); 
23         //将文件内容存入StringBuffer中  
24         while((s = br.readLine()) != null) {  
25             sb.append(s);  
26         }  
27         //不区分大小写
28         String str = sb.toString().toLowerCase();
29       //分隔字符串并存入数组  (以,。空格分割)
30         String[] elements = str.split("[, . \\s]");  
31         int count = 0;  
32         Map<String, Integer> myTreeMap = new TreeMap<String, Integer>();  
33         //遍历数组将其存入Map<String, Integer>中  
34         for(int i = 0; i < elements.length; i++) {  
35             if(myTreeMap.containsKey(elements[i])) {  
36                 count = myTreeMap.get(elements[i]);  
37                 myTreeMap.put(elements[i], count + 1);  
38             }  
39             else {  
40                 myTreeMap.put(elements[i], 1);  
41             }  
42         }              
43         System.out.println("单词统计的结果如下");  
44         //将map.entrySet()转换成list  
45         List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(myTreeMap.entrySet());  
46         //通过比较器实现排序  
47         Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {  
48             //降序排序  
49             public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {  
50                 return o2.getValue().compareTo(o1.getValue());  
51             }  
52         });  
53         int num = 1;  
54         for(Map.Entry<String, Integer> map : list) {  
55             if(num <= n) {  
56                 if(map.getKey().contentEquals(",")==false)
57                 {
58                     System.out.println("出现次数第" + num + "的单词为:" + map.getKey() + ",出现频率为" + map.getValue() + "次");
59                 }
60                 num++;  
61             }  
62             else break;  
63         }  
64     } catch (FileNotFoundException e) {
65         e.printStackTrace();
66     } catch (IOException e) {
67         e.printStackTrace();
68     }finally{
69         try {
70             br.close();
71         } catch (IOException e) {
72             e.printStackTrace();
73         }  
74     }
75 }
76 }

猜你喜欢

转载自www.cnblogs.com/2940500426yingxin/p/11809224.html