博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单词查找排序输出
阅读量:5163 次
发布时间:2019-06-13

本文共 2351 字,大约阅读时间需要 7 分钟。

前几天软件工程老师布置了一道题,关于单词查找排序的问题,题目是找出一篇英文文章出出现频率最高的十个单词,并打印输出。初看到这个题目,觉得不难,无非是文件读入,数组,查找单词,比较排序之类的,但是由于学得比较渣,编程水平有限,所以借助大神的力量,经过多方学习和借鉴,用java实现了。因为近年来比较流行java,java有丰富的类库和函数,可以拿来直接用,所以比较方便编程。接下来介绍java代码的思路。

需求分析:查找十个频率最高的单词,然后输出单词及其次数。首先导入文件,可以用BufferedReader,然后用正则表达式匹配单词,如果用空格和标点也行,但是有个问题,文章中的引号不好分离,所以还是用 Pattern.compile("[a-zA-Z]+")比较好,然后用map进行相同字数的统计,然后排序,但是treemap是按key比较排序的,此题应该是换成按value比较,所以要重写比较器,最后用Collections.sort(list, comparator)进行排序。

接下来是程序代码:

import java.io.*;//通过数据流、序列化和文件系统提供系统输入和输出import java.util.*;//包含 collection 框架、遗留的 collection 类、各种工具类(字符串标记生成器、随机数生成器和位数组)import java.util.regex.*;//负责对字符序列进行正则表达式匹配public class Counts {public static void main(String[] args) throws Exception {  //抛出异常BufferedReader reader = new BufferedReader(new FileReader(     //从文件中导入内容                "C:\\Users\\admin\\desktop\\ok.txt"));        StringBuffer buffer = new StringBuffer();        String line = null;        while ((line = reader.readLine()) != null) {            buffer.append(line);        }        reader.close();        Pattern expression = Pattern.compile("[a-zA-Z]+");// 定义正则表达式匹配单词        String string = buffer.toString();        Matcher matcher = expression.matcher(string);//        Map
map = new TreeMap
(); String word = ""; int times = 0; while (matcher.find()) {
// 是否匹配单词 word = matcher.group();// 得到一个单词-树映射的键 if (map.containsKey(word)) {
// 如果包含该键,单词出现过 times = map.get(word);// 得到单词出现的次数 map.put(word, times + 1); } else { map.put(word, 1);// 否则单词第一次出现,添加到映射中 } } List
> list = new ArrayList
>( //按照TreeMap 的value排序而不是key排序.将Map.Entry放在集合里 map.entrySet()); Comparator
> comparator = new Comparator
>() { //重写比较器 public int compare(Map.Entry
left, Map.Entry
right) { return (left.getValue()).compareTo(right.getValue()); // 取出单词个数(value)比较 } }; System.out.println("以下是频率最高的十个词:"); Collections.sort(list, comparator);// 排序 int last = list.size() - 1; for (int i = last; i > last - 10; i--) { // 打印最多十个 String key = list.get(i).getKey(); Integer value = list.get(i).getValue(); System.out.println("单词:"+key +" \n"+"次数:" + value); } }}

 

 

转载于:https://www.cnblogs.com/suhaiyan/p/3575550.html

你可能感兴趣的文章
四年多没碰C++了。。。
查看>>
nginx负载均衡 ->Tomcat8集群 -> sentinel集群 -> redis3主从
查看>>
Tomato的init启动流程分析(原创)
查看>>
java中static使用之静态方法注意点
查看>>
方格取数
查看>>
用Darwin和live555实现的直播框架
查看>>
Struts 2 常用技术
查看>>
tr069开源协议EasyCwmp移植
查看>>
Android 开发工具类 33_开机自运行
查看>>
pom仓库
查看>>
第五篇、微信小程序-swiper组件
查看>>
SecureCRT来上传和下载文件
查看>>
core文件
查看>>
python练习 遍历目录os.walk()
查看>>
box-sizing
查看>>
浅谈流形学习(转)
查看>>
单向链表
查看>>
O2耳放 DIY 模拟放大
查看>>
Linux 下源码编译安装 vim 8.1
查看>>
网络图片查看器
查看>>