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 }

结果:

原文地址:https://www.cnblogs.com/Aming-/p/11800353.html

时间: 2024-08-10 22:09:57

Java课堂测试——输出单个文件中的前N个最常出现的英语单词的相关文章

Java的实验程序之输出单个文件中的前 N 个最常出现的英语单词

日期:2018.10.11 星期四 博客期:016 题目:输出单个文件中的前 N 个最常出现的英语单词,并输出到文本文件中 在程序运行之前,我试着先写了字符的字母的总结,加载代码如下: 1 //如下是第一个程序的 CharBasic文件 2 package src; 3 4 public final class CharBasic { 5 //检测字母是否为字母 6 public static boolean isAtoZ(char c){ 7 return c<='z'&&c>

fprintf输出到文件中,sprintf输出到字符串中. 如: fprintf(fp,&quot;%s&quot;,name); fp为文件指针 sprintf(buff,&quot;%s&quot;,name); buff为字符数组

fprintf输出到文件中,sprintf输出到字符串中. 如: fprintf(fp,"%s",name); fp为文件指针 sprintf(buff,"%s",name); buff为字符数组 fprintf输出到文件中,sprintf输出到字符串中. 如: fprintf(fp,"%s",name); fp为文件指针 sprintf(buff,"%s",name); buff为字符数组

将Linux下编译的warning警告信息输出到文件中[整理笔记]

Linux中,脚本语言环境中,即你用make xxx即其他一些普通linux命令,比如ls,find等,不同的数字,代表不同的含义: 数字 含义 标准叫法0 标准输入  stdin = standard input1 标准输出  stdout = standard output2 标准错误输出  stderr = standard error 而系统默认的stdin,stdout,stderr,都是屏幕,所以,当你执行命令,比如make,后,所输出的信息,都是可以在屏幕上看到的.所以,想要将对应

Java课堂测试——课程管理

本周的Java课,王老师让学长们就上周的课堂测试内容进行了讲解.本次讲解加强了我对JavaWeb的项目的认识.虽然JSP文件和Servlet文件里面涉及到的各个方法我不能很好的理解,可是关于表单提交,和数据库的信息处理等代码,我勉强可以理解它们的作用,并可以根据自己的需要对现有的代码进行修改,实现自己需要的功能.就本周的测试而言,我可以实现大部分要求的功能,但是有很多不足之处,比如界面不美观,无法实现模糊查找等.我将对本次的实验做出如下总结. 首先创建一个类,在类里面实现数据库的连接,如下所示.

将生成的xnl文件输出到文件中

代码: import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer;

JAVA代码实现下载单个文件,和下载打包文件

//下载单个文件调用方法 /**     * response     * imgPath 下载图片地址    * fileName 保存下载文件名称    * @date 2015年4月14日 下午5:53:24     */     public static void download(HttpServletResponse response,String imgPath,String fileName){         OutputStream out=null;         Bu

ios 将Log日志重定向输出到文件中保存

对于真机,日志没法保存,不好分析问题.所以有必要将日志保存到应用的Docunment目录下,并设置成共享文件,这样才能取出分析. 首先是日志输出,分为c的printf和标准的NSLog输出,printf会向标准输出(sedout)打印,而NSLog则是向标准出错(stderr),我们需要同时让他们都将日志打印到一个文件中. 例子: freopen("xx.log","a+",stdout); freopen("xx.log","a+&q

java 写入数据到Excel文件中_Demo

=======第一版:基本功能实现======= import com.google.common.collect.Maps; import org.apache.log4j.Logger; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io

iOS 将Log日志输出到文件中保存

对于那些做后端开发的工程师来说,看LOG解Bug应该是理所当然的事,但我接触到的移动应用开发的工程师里面,很多人并没有这个意识,查Bug时总是一遍一遍的试图重现,试图调试,特别是对一些不太容易重现的Bug经常焦头烂额.而且iOS的异常机制比较复杂,Objective-C的语言驾驭也需要一定的功力,做出来的应用有时候挺容易产生崩溃闪退.一遍一遍的用XCode取应用崩溃记录.解析符号,通常不胜其烦,有时还对着解析出来的调用栈发呆,因为程序当时的内部状态常常难以看明白,只能去猜测. 对于真机,日志没法