zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    [Swift]LeetCode300. 最长上升子序列 | Longest Increasing Subsequence
    备忘录模式之C++实现
    leecode 题解 || Merge k Sorted Lists 问题
    数学三大危机
    singlefile.py
    Data Url生成工具之HTML5 FileReader实现
    算法题:打印1到最大的n位数
    java.lang.NoClassDefFoundError: org/apache/commons/lang/xwork/StringUtils
    hdu 1181 变形课
    postgis经常使用函数介绍(一)
  • 原文地址:https://www.cnblogs.com/2940500426yingxin/p/11809224.html
Copyright © 2011-2022 走看看