zoukankan      html  css  js  c++  java
  • Java课堂测试——输出单个文件中的前N个最常出现的英语单词

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

    HarryFre.java

     1 package demo05;
     2 
     3 import java.io.FileInputStream;
     4 import java.io.IOException;
     5 import java.io.InputStreamReader;
     6 import java.text.DecimalFormat;
     7 import java.util.ArrayList;
     8 import java.util.List;
     9 
    10 public class HarryFre {
    11     public static void main(String[] args)throws IOException
    12     {
    13         List<Integer> list=new ArrayList<>();
    14         DecimalFormat df=new DecimalFormat("######0.00");  
    15          FileInputStream fip = new FileInputStream("C:\Users\Aming\Desktop\Harry Potter and the Sorcerer's Stone.txt");
    16         InputStreamReader reader = new InputStreamReader(fip, "gbk");
    17         StringBuffer sb = new StringBuffer();
    18         while (reader.ready()) {
    19             sb.append((char) reader.read());
    20         }
    21         reader.close();
    22         fip.close();
    23         
    24         int i;
    25         String A=sb.toString();
    26         String M="abcdefghijklmnopqrstuvwxyz";
    27         String temp = "";
    28         char NUM[]=new char[A.length()];
    29         char Z[]=new char[26];
    30         int X[]=new int[26];
    31         int MAX=0;
    32         Z=M.toCharArray();
    33         for(int k=0;k<26;k++)
    34         {
    35             X[k]=0;
    36         for(i=0;i<A.length();i++)
    37         {
    38             NUM[i]=A.charAt(i);
    39             if(Z[k]==NUM[i]||Z[k]==ch(NUM[i]))
    40             {
    41                 X[k]++;
    42             }
    43         }
    44         }
    45 
    46         
    47         double sum=0;
    48         for(i=0;i<25;i++)
    49             for(int k=0;k<25-i;k++)
    50             {
    51                 if(X[k]<X[k+1])
    52                 {
    53                     int temp2=X[k];
    54                     X[k]=X[k+1];
    55                     X[k+1]=temp2;
    56                     char temp3=Z[k];
    57                     Z[k]=Z[k+1];
    58                     Z[k+1]=temp3;
    59                 }
    60             }
    61         for(i=0;i<26;i++) {
    62             sum=sum+X[i];
    63         }
    64         for(i=0;i<26;i++)
    65         {
    66             double jkl=(X[i])/sum*100;
    67         System.out.println(Z[i]+"个数:"+X[i]+"频率为:"+df.format(jkl)+"%");
    68         }
    69         
    70     }
    71     static char ch(char c)
    72     {
    73         if(!(c>=97&&c<=122))
    74             c+=32;
    75         return c;
    76     }
    77 
    78 }

    结果:

    课堂测试二:输出单个文件中的前N个最常出现的英语单词

    以英文字母开头,由英文字母和字母数字符号组成的字符视为一个单词。单词以分隔符分隔且不区分大小写。在输出时,所有单词都用小写字符表示。

    HarryPro.java

     1 package demo05;
     2 
     3 import java.io.*;
     4 import java.util.*;
     5 import java.util.Map.Entry;
     6 
     7 public class HarryPo 
     8 {
     9     public static int n=0;
    10     public static void main(String[] args) {
    11     Scanner input=new Scanner(System.in);
    12     String s;
    13     int count=0;
    14     int num=1;
    15     //作为FileReader和FileWriter读取的对象
    16     String file1="C:\Users\Aming\Desktop\Harry Potter and the Sorcerer's Stone.txt";
    17     String file2="C:\Users\Aming\Desktop\re.txt";
    18     try
    19     {
    20       BufferedReader a=new BufferedReader(new FileReader(file1));
    21       BufferedWriter b=new BufferedWriter(new FileWriter(file2));
    22       StringBuffer c=new StringBuffer();
    23       //将文件内容存入StringBuffer中
    24       while((s = a.readLine()) != null) 
    25       {
    26             //用于拼接字符串
    27             c.append(s);
    28       }
    29       //将StringBuffer转换成String,然后再将所有字符转化成小写字符
    30       String m=c.toString().toLowerCase();
    31       //匹配由数字和26个字母组成的字符串
    32       String [] d=m.split("[^a-zA-Z0-9]+");
    33       //遍历数组将其存入Map<String, Integer>中
    34       Map<String , Integer> myTreeMap=new  TreeMap<String, Integer>();
    35       for(int i = 0; i < d.length; i++) {
    36           //containsKey()方法用于检查特定键是否在TreeMap中映射
    37             if(myTreeMap.containsKey(d[i])) {
    38                 count = myTreeMap.get(d[i]);
    39                 myTreeMap.put(d[i], count + 1);
    40             }
    41             else {
    42                 myTreeMap.put(d[i], 1);
    43             }
    44         } 
    45     //通过比较器实现排序
    46       List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(myTreeMap.entrySet());
    47     //按降序排序
    48       Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
    49           
    50             public int compare(Entry<String, Integer> k1, Entry<String, Integer> k2) {
    51                 //返回两个单词出现次数较多的那个单词的出现次数
    52                 return k2.getValue().compareTo(k1.getValue());
    53             }
    54             
    55         });
    56        System.out.println("请输入要输出前N名的N:");
    57         n=input.nextInt();
    58       for(Map.Entry<String, Integer> map : list) {
    59             if(num <= n) {
    60                 //按内容输出到指定文件中去
    61                 b.write("出现次数第" + num + "的单词为:" + map.getKey() + ",出现频率为" + map.getValue() + "次");
    62                 b.newLine();
    63                 System.out.println(map.getKey() + ":" + map.getValue());
    64                 num++;
    65             }
    66             else break;
    67         }
    68         a.close();
    69         b.close();
    70     }
    71     catch(FileNotFoundException e)
    72     {
    73         System.out.println("找不到指定文件");
    74     }
    75     catch(IOException e)
    76     {
    77         System.out.println("文件读取错误");
    78     }
    79     System.out.println("输出完成");
    80 }
    81 }

    结果:

    课堂测试三:要求同二

    功能1:输出文件中所有不重复的单词,按照出现次数由多到少排列,出现次数同样多的,以字典序排列。

    功能2:指定文件目录,对目录下的每一个文件执行功能1的操作。

    功能3:指定文件目录,但是会递归遍历目录下的所有子目录,每个文件执行功能1的操作。

    功能1:

    HHHarry.java

     1 package demo05;
     2 
     3 import java.io.*;
     4 import java.util.*;
     5 import java.util.Map.Entry;
     6 
     7 public class HHHarry 
     8 {
     9     public static int n=0;
    10     public static void main(String[] args) {
    11     Scanner input=new Scanner(System.in);
    12     String s;
    13     int count=0;
    14     int num=1;
    15     //作为FileReader和FileWriter读取的对象
    16     String file1="C:\Users\Aming\Desktop\Harry Potter and the Sorcerer's Stone.txt";
    17     String file2="C:\Users\Aming\Desktop\re1.txt";
    18     try
    19     {
    20       BufferedReader a=new BufferedReader(new FileReader(file1));
    21       BufferedWriter b=new BufferedWriter(new FileWriter(file2));
    22       StringBuffer c=new StringBuffer();
    23       //将文件内容存入StringBuffer中
    24       while((s = a.readLine()) != null) 
    25       {
    26             //用于拼接字符串
    27             c.append(s);
    28       }
    29       //将StringBuffer转换成String,然后再将所有字符转化成小写字符
    30       String m=c.toString().toLowerCase();
    31       //匹配由数字和26个字母组成的字符串
    32       String [] d=m.split("[^a-zA-Z0-9]+");
    33       //遍历数组将其存入Map<String, Integer>中
    34       Map<String , Integer> myTreeMap=new  TreeMap<String, Integer>();
    35       for(int i = 0; i < d.length; i++) {
    36           //containsKey()方法用于检查特定键是否在TreeMap中映射
    37             if(myTreeMap.containsKey(d[i])) {
    38                 count = myTreeMap.get(d[i]);
    39                 myTreeMap.put(d[i], count + 1);
    40             }
    41             else {
    42                 myTreeMap.put(d[i], 1);
    43             }
    44         } 
    45     //通过比较器实现排序
    46       List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(myTreeMap.entrySet());
    47     //按降序排序
    48       Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
    49           
    50             public int compare(Entry<String, Integer> k1, Entry<String, Integer> k2) {
    51                 //返回两个单词出现次数较多的那个单词的出现次数
    52                 return k2.getValue().compareTo(k1.getValue());
    53             }
    54             
    55         });
    56 
    57 
    58       for(Map.Entry<String, Integer> map : list) {
    59             if(true) {
    60                 //按内容输出到指定文件中去
    61                 b.write("出现次数第" + num + "的单词为:" + map.getKey() + ",出现频率为" + map.getValue() + "次");
    62                 b.newLine();
    63                 System.out.println(map.getKey() + ":" + map.getValue());
    64                 num++;
    65             }
    66             else break;
    67         }
    68         a.close();
    69         b.close();
    70     }
    71     catch(FileNotFoundException e)
    72     {
    73         System.out.println("找不到指定文件");
    74     }
    75     catch(IOException e)
    76     {
    77         System.out.println("文件读取错误");
    78     }
    79     System.out.println("输出完成");
    80 }
    81 }

    结果:

     

     

     

  • 相关阅读:
    RESTful API 设计指南
    浅析JS中的模块规范(CommonJS,AMD,CMD)
    Gitbucket—快速建立自己的Github
    单点登录详解
    Java常用类--处理日期
    Java常用类--数字常用类
    java常用类--字符串
    java常用类--系统相关
    java常用类--与用户互动
    设置PATH和CLASSPATH
  • 原文地址:https://www.cnblogs.com/Aming-/p/11800353.html
Copyright © 2011-2022 走看看