用java实现输出英文小说飘中出现次数最多的前N个单词(附:使用文件读写)

本文参考于: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

用java实现输出英文小说飘中出现次数最多的前N个单词(附:使用文件读写)的相关文章

给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 ,返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况)

1 """ 2 #给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 3 #返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况) 4 解题思路: 5 1.设定一个空字典,去存储列表中的值和值出现的次数 6 2.使用L.count()方法可以统计出L中值出现的次数 7 3.使用sorted方法可以进行排序,sorted(iterable,key,reverse) 8 注意key是函数 9 4.列表中的元祖取值 d[i][j] i是哪一个元祖,j是元祖

python_exercise_给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 ,返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况)

# 设定给出的非空数组为list_a,如下list_a = [8,1,3,5,1,2,45,8,5,7,7,8,8,8,8,8,8,5,5] # 将list_a去重,留下唯一值list_a_set = set(list_a) # 将list_a去重后的值作为字典的key放到字典中list_a_dict = {x:None for x in list_a_set} # 遍历将list_a去重后的唯一值,统计唯一值出现的次数.把次数作为字典的value放到字典中for l in list_a_set

给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。

ccf认证考试2013年12月第一题 问题描述 给定n个正整数,找出它们中出现次数最多的数.如果这样的数有多个,请输出其中最小的一个. 输入格式 输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数. 输入的第二行有n个整数s1, s2, -, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n).相邻的数用空格分隔. 输出格式 输出这n个次数中出现次数最多的数.如果这样的数有多个,输出其中最小的一个. 样例输入 6 10 1 10 20 30 20 样例输出 10

找出n个字符串中出现次数最多的字符串。

1. 找出n个字符串中出现次数最多的字符串. C/C++: char* find(char **data,int n); Java: String find(String data[]); 说明: 1. data是字符串数组,n是数组中字符串的个数,返回值为出现次数最多的字符串. 2. 若结果有多个,返回任意一个即可 3. 不得使用任何库函数/API,如需使用类似功能, 请自行实现 4. 算法效率尽可能高,尽量少的使用内存空间 5. 必须要有代码注释和算法说明. 例如:data里面的数据是{“p

数组-10. 求整数序列中出现次数最多的数

数组-10. 求整数序列中出现次数最多的数(15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 张彤彧(浙江大学) 本题要求统计一个整型序列中出现次数最多的整数及其出现次数. 输入格式: 输入在一行中给出序列中整数个数N(0<N<=1000),以及N个整数.数字间以空格分隔. 输出格式: 在一行中输出出现次数最多的整数及其出现次数,数字间以空格分隔.题目保证这样的数字是唯一的. 输入样例: 10 3 2 -1 5 3 4 3

数组-10. 求整数序列中出现次数最多的数(15)

本题要求统计一个整型序列中出现次数最多的整数及其出现次数. 输入格式: 输入在一行中给出序列中整数个数N(0<N<=1000),以及N个整数.数字间以空格分隔. 输出格式: 在一行中输出出现次数最多的整数及其出现次数,数字间以空格分隔.题目保证这样的数字是唯一的. 输入样例: 10 3 2 -1 5 3 4 3 0 3 2 输出样例: 3 4 #include <stdio.h> #define N 1000 int comp(const void *p, const void *

程序员面试题目总结--数组(三)【旋转数组的最小数字、旋转数组中查找指定数、两个排序数组所有元素中间值、数组中重复次数最多的数、数组中出现次数超过一半的数】

转!http://blog.csdn.net/dabusideqiang/article/details/38271661 11.求旋转数组的最小数字 题目:输入一个排好序的数组的一个旋转,输出旋转数组的最小元素. 分析:数组的旋转:把一个数组最开始的若干个元素搬到数组的末尾.例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1.这道题最直观的解法并不难.从头到尾遍历数组一次,就能找出最小的元素,时间复杂度显然是O(N).但这个思路没有利用输入数组

找出该字符串中出现次数最多的那个字符

/*时间限制 C/C++ 3s 其他 6s, 空间限制 C/C++ 32768k 其他 65535k 题目描述     给定一个长度不限的字符串,请找出该字符串中出现次数最多的那个字符,并打印出该字符及其出现次数; 如果多个字符的出 现次数相同,只打印首个字符;输出字符的大小写格式要与输 入保持一致,大小写不敏感模式下, 输出字符的大小写格式与该 字符首次出现时的大小写格式一致.实现时无需考虑非法输. 输入描述     输入为 字符串大小写敏感标记 其中"大小写敏感标记"为可选参数,取

7-6 求整数序列中出现次数最多的数 (15 分)

7-6 求整数序列中出现次数最多的数 (15 分) 本题要求统计一个整型序列中出现次数最多的整数及其出现次数. 输入格式: 输入在一行中给出序列中整数个数N(0<N≤1000),以及N个整数.数字间以空格分隔. 输出格式: 在一行中输出出现次数最多的整数及其出现次数,数字间以空格分隔.题目保证这样的数字是唯一的. 输入样例: 10 3 2 -1 5 3 4 3 0 3 2 输出样例: 3 4 s = input().split()[1:] count_max = 0 for i in set(s