本文参考于:https://blog.csdn.net/u014204432/article/details/40348839

一、题目

输出单个文件(《飘》 英文版)中的前 N 个最常出现的英语单词,并将结果输入到文本文件中。

二、程序设计思路

1、首先将英文小说飘文件内容用文件读写方式读入StringBuffer中,然后一行一行读取并去掉句子和单词

间空格然后将StringBuffer转换成String,然后再将所有字符转化成小写字符,然后再将句子分割成单词并

存入字符数组。

2、随后遍历数组将其存入Map<String, Integer>中,不断映射字符串和整数,给每种单词或者每个字符数

组计数,映射出每个单词和其出现次数,在通过比较器实现降序排序,实现单词出现次数排序。

3.加上文件异常操作,最后输出英文小说飘中出现次数最多的前N个单词和其对应的次数

三、程序源代码

 import java.io.*;
import java.util.*;
import java.util.Map.Entry; public class tongjidanci
{
public static int n=0;
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
String s;
int count=0;
int num=1;
//作为FileReader和FileWriter读取的对象
String file1="C:\\Users\\米羊\\Desktop\\piao.txt";
String file2="C:\\Users\\米羊\\Desktop\\fenxijieguo.txt";
try
{
BufferedReader a=new BufferedReader(new FileReader(file1));
BufferedWriter b=new BufferedWriter(new FileWriter(file2));
StringBuffer c=new StringBuffer();
//将文件内容存入StringBuffer中
while((s = a.readLine()) != null)
{
//用于拼接字符串
c.append(s);
}
//将StringBuffer转换成String,然后再将所有字符转化成小写字符
String m=c.toString().toLowerCase();
//匹配由数字和26个字母组成的字符串
String [] d=m.split("[^a-zA-Z0-9]+");
//遍历数组将其存入Map<String, Integer>中
Map<String , Integer> myTreeMap=new TreeMap<String, Integer>();
for(int i = 0; i < d.length; i++) {
//containsKey()方法用于检查特定键是否在TreeMap中映射
if(myTreeMap.containsKey(d[i])) {
count = myTreeMap.get(d[i]);
myTreeMap.put(d[i], count + 1);
}
else {
myTreeMap.put(d[i], 1);
}
}
//通过比较器实现排序
List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(myTreeMap.entrySet());
//按降序排序
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() { public int compare(Entry<String, Integer> k1, Entry<String, Integer> k2) {
//返回两个单词出现次数较多的那个单词的出现次数
return k2.getValue().compareTo(k1.getValue());
} });
System.out.println("请输入要输出前N名的N");
n=input.nextInt();
for(Map.Entry<String, Integer> map : list) {
if(num <= n) {
//按内容输出到指定文件中去
b.write("出现次数第" + num + "的单词为:" + map.getKey() + ",出现频率为" + map.getValue() + "次");
//换行
b.newLine();
//输出到程序控制台
System.out.println(map.getKey() + ":" + map.getValue());
num++;
}
//输出完毕退出
else break;
}
//关闭文件指针
a.close();
b.close();
}
catch(FileNotFoundException e)
{
System.out.println("找不到指定文件");
}
catch(IOException e)
{
System.out.println("文件读取错误");
}
System.out.println("输出完成");
}
}

四、运行结果

1、程序结果

2.文件结果

版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

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

  1. sort +awk+uniq 统计文件中出现次数最多的前10个单词

    实例cat logt.log|sort -s -t '-' -k1n |awk '{print $1;}'|uniq -c|sort -k1nr|head -100 统计文件中出现次数最多的前10个单 ...

  2. 转载:Linux命令经典面试题:统计文件中出现次数最多的前10个单词

    1.使用linux命令或者shell实现:文件words存放英文单词,格式为每行一个英文单词(单词可以重复),统计这个文件中出现次数最多的前10个单词 主要考察对sort.uniq命令的使用,相关解释 ...

  3. 获取全部 txt 文本中出现次数最多的前N个词汇

    1.使用 chain 对 allwords 二维列表进行解包 from itertools import chain allwords = [] allwords.append(列表) 解包: cha ...

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

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

  5. 查询nginx访问日志中访问次数最多的前10个IP地址

    cat log | cut -d ' ' -f 1 | sort | uniq -c | sort -nr | awk '{print $0}' | head -n 10

  6. JavaScript判断字符串中出现次数最多的字符,并统计其次数

    要求: 输出一个给定字符串``中出现次数最多的字符,并统计其次数. 实现思路: 利用charA()遍历这个字符串 把每个字符都存储给对象,如果对象没有该属性,就先幅值为1,如果存在了就+1 遍历对象, ...

  7. Java求字符串中出现次数最多的字符

    Java求字符串中出现次数最多的字符  [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/51933611      Java ...

  8. 使用 Java 查找字符串中出现次数最多的字符以及出现的次数?

    使用 Java 查找字符串中出现次数最多的字符以及出现的次数? import java.util.HashMap; import java.util.Map; public class TestStr ...

  9. JS查找字符串中出现次数最多的字符

    本文给大家带来两种js中查找字符串中出现次数最多的字符,在这两种方法中小编推荐使用第二种,对js查找字符串出现次数的相关知识感兴趣的朋友一起看看吧   在一个字符串中,如 'zhaochucichuz ...

随机推荐

  1. idea新建maven project工程

    1.new project: 2.新建在main 下新建 java directory 并mark as  source root,这里我已经makr过java目录所以以showfor做演示: 3.新 ...

  2. 国内免费可用的STUN服务器(webrtc 必备)

    更新于2017年8月,本人亲测,国内可用,而且速度非常快! webRTC不可缺少的环节. 免费 STUN服务器列表(亲测有效)NO. STUN服务器 端口 有效 测试日期1 stun.xten.com ...

  3. Spring Boot中Restful Api的异常统一处理

    我们在用Spring Boot去向前端提供Restful Api接口时,经常会遇到接口处理异常的情况,产生异常的可能原因是参数错误,空指针异常,SQL执行错误等等. 当发生这些异常时,Spring B ...

  4. 实现一个简易的Unity网络同步引擎——netgo

    实现一个简易的Unity网络同步引擎Netgo 目前GOLANG有大行其道的趋势,尤其是在网络编程方面.因为和c/c++比较起来,虽然GC占用了一部分机器性能,但是出错概率小了,开发效率大大提升,而且 ...

  5. VBA 学习笔记 - 变量与常量

    学习资料:https://www.yiibai.com/vba/vba_variables.html 变量和常量命名规则 必须以字母开头 不能包含空格.句点(.).感叹号(!)或字符@,&,$ ...

  6. PyQt5控件支持拖拽方法

    让控件支持拖拽动作A.setDragEnable(True) 设置A可以拖动B.setAcceptDrops(True) 设置B可以接受拖动B需要满足两个事件1.dragEnterEvent 将A拖到 ...

  7. ANSYS布尔运算APDL

    目录 1.交运算 2.加运算 3.减运算 4.分割 5. 搭接 6. 互分 6.粘结 1.交运算 交运算的结果是由每个初始图元的共同部分,形成一个新的图元. 命令 功能 备注 LINL 线与线的交 A ...

  8. JAVA面向对象解决实际问题实例(一)

    某次战役中,为便于信息交互,我军侦察部门将此次战役的关键高地坐标设定为(x=0,y=0)并规定,每向东增加100米,x加1,每向北增加100米,y加1.同时,我军情报部门也破译了敌军向坦克发送的指挥信 ...

  9. Update(Stage4):Spark Streaming原理_运行过程_高级特性

    Spark Streaming 导读 介绍 入门 原理 操作 Table of Contents 1. Spark Streaming 介绍 2. Spark Streaming 入门 2. 原理 3 ...

  10. Python下opencv使用笔记(十一)(详解hough变换检测直线与圆)

    http://blog.csdn.net/on2way/article/details/47028969 http://blog.csdn.net/mokeding/article/details/1 ...