本文参考于:https://blog.csdn.net/u014204432/article/details/40348839
一、题目
输出单个文件(《飘》 英文版)中的前 N 个最常出现的英语单词,并将结果输入到文本文件中。
二、程序设计思路
1、首先将英文小说飘文件内容用文件读写方式读入StringBuffer中,然后一行一行读取并去掉句子和单词
间空格然后将StringBuffer转换成String,然后再将所有字符转化成小写字符,然后再将句子分割成单词并
存入字符数组。
2、随后遍历数组将其存入Map<String, Integer>中,不断映射字符串和整数,给每种单词或者每个字符数
组计数,映射出每个单词和其出现次数,在通过比较器实现降序排序,实现单词出现次数排序。
3.加上文件异常操作,最后输出英文小说飘中出现次数最多的前N个单词和其对应的次数
三、程序源代码
1 import java.io.*; 2 import java.util.*; 3 import java.util.Map.Entry; 4 5 public class tongjidanci 6 { 7 public static int n=0; 8 public static void main(String[] args) { 9 Scanner input=new Scanner(System.in); 10 String s; 11 int count=0; 12 int num=1; 13 //作为FileReader和FileWriter读取的对象 14 String file1="C:\\Users\\米羊\\Desktop\\piao.txt"; 15 String file2="C:\\Users\\米羊\\Desktop\\fenxijieguo.txt"; 16 try 17 { 18 BufferedReader a=new BufferedReader(new FileReader(file1)); 19 BufferedWriter b=new BufferedWriter(new FileWriter(file2)); 20 StringBuffer c=new StringBuffer(); 21 //将文件内容存入StringBuffer中 22 while((s = a.readLine()) != null) 23 { 24 //用于拼接字符串 25 c.append(s); 26 } 27 //将StringBuffer转换成String,然后再将所有字符转化成小写字符 28 String m=c.toString().toLowerCase(); 29 //匹配由数字和26个字母组成的字符串 30 String [] d=m.split("[^a-zA-Z0-9]+"); 31 //遍历数组将其存入Map<String, Integer>中 32 Map<String , Integer> myTreeMap=new TreeMap<String, Integer>(); 33 for(int i = 0; i < d.length; i++) { 34 //containsKey()方法用于检查特定键是否在TreeMap中映射 35 if(myTreeMap.containsKey(d[i])) { 36 count = myTreeMap.get(d[i]); 37 myTreeMap.put(d[i], count + 1); 38 } 39 else { 40 myTreeMap.put(d[i], 1); 41 } 42 } 43 //通过比较器实现排序 44 List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(myTreeMap.entrySet()); 45 //按降序排序 46 Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() { 47 48 public int compare(Entry<String, Integer> k1, Entry<String, Integer> k2) { 49 //返回两个单词出现次数较多的那个单词的出现次数 50 return k2.getValue().compareTo(k1.getValue()); 51 } 52 53 }); 54 System.out.println("请输入要输出前N名的N"); 55 n=input.nextInt(); 56 for(Map.Entry<String, Integer> map : list) { 57 if(num <= n) { 58 //按内容输出到指定文件中去 59 b.write("出现次数第" + num + "的单词为:" + map.getKey() + ",出现频率为" + map.getValue() + "次"); 60 //换行 61 b.newLine(); 62 //输出到程序控制台 63 System.out.println(map.getKey() + ":" + map.getValue()); 64 num++; 65 } 66 //输出完毕退出 67 else break; 68 } 69 //关闭文件指针 70 a.close(); 71 b.close(); 72 } 73 catch(FileNotFoundException e) 74 { 75 System.out.println("找不到指定文件"); 76 } 77 catch(IOException e) 78 { 79 System.out.println("文件读取错误"); 80 } 81 System.out.println("输出完成"); 82 } 83 }
四、运行结果
1、程序结果
2.文件结果
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
原文地址:https://www.cnblogs.com/yang2000/p/11605325.html
时间: 2024-10-05 05:16:32