1. 学号:16012019 姜海睿 16012006 刘晨
GIT的提交地址:https://gitee.com/bubblerui/0619/tree/master
2. 实训照片
3. 本次作业的解题思路
老五在寝室吹牛他熟读过《鲁滨逊漂流记》,在女生面前吹牛热爱《呼啸山庄》《简爱》和《飘》,在你面前说通读了《战争与和平》。但是,他的四级至今没过。你们几个私下商量,这几本大作的单词量怎么可能低于四级,大家听说你学习《构建之法》,一致推举你写个程序名字叫wf,统计英文作品的单词量并给出每个单词出现的次数,准备用于打脸老五。
希望实现以下效果:
- 1.读取文件,文件内包可含英文字符,及常见标点,空格级换行符。
- 2.统计英文单词在本文件的出现次数
- 3.将统计结果排序
- 4.显示排序结果
import java.io.BufferedReader; import java.io.FileReader; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.TreeMap; /** * * @author cute * * * 实现从文件中读入英文文章,统计单词个数,并按值从大到小输出 */ public class wf { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new FileReader("F:\\BUBBLE\\文章.txt")); List<String> lists = new ArrayList<String>(); //存储过滤后单词的列表 String readLine = null; while((readLine = br.readLine()) != null){ String[] wordsArr1 = readLine.split("[^a-zA-Z]"); //过滤出只含有字母的 for (String word : wordsArr1) { if(word.length() != 0){ //去除长度为0的行 lists.add(word); } } } br.close(); Map<String, Integer> wordsCount = new TreeMap<String,Integer>(); //存储单词计数信息,key值为单词,value为单词数 //单词的词频统计 for (String li : lists) { if(wordsCount.get(li) != null){ wordsCount.put(li,wordsCount.get(li) + 1); }else{ wordsCount.put(li,1); } } SortMap(wordsCount); //按值进行排序 } //按value的大小进行排序 public static void SortMap(Map<String,Integer> oldmap){ ArrayList<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(oldmap.entrySet()); Collections.sort(list,new Comparator<Map.Entry<String,Integer>>(){ public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) { return o2.getValue() - o1.getValue(); //降序 } }); for(int i = 0; i<list.size(); i++){ System.out.println(list.get(i).getKey()+ ": " +list.get(i).getValue()); } } }
通过检索文本文档上的英文文章,统计英文单词出现的次数,通过使用循环,排序,定义类,文件夹批量处理,并且需要使用排序方法实现降序输出