一、
输出某个英文文本文件中 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 }