首先是第一次接触博客园,感觉这是一个非常棒的交流平台,不管是菜鸟还是老手都可以在这学习到很多。
首先看到这个题目。首先我对这个题目进行了分析,此过程大概持续了1天时间,最后我确定用Java来完成。
然后就是设计阶段:本程序利用HashMap先存储读取的单词,并且记录出现频率。然后倒入到List中,通过自定义的Comparator来通过频率高低排序,显示前十个。
然后进入编码阶段:此过程持续1天。
最后需要对自己编写的程序进行测试以及修改,发现不好的地方改进。
下面是对此程序每个阶段的具体分析:
一:此段程序是文件读取
File file = newFile(path);
FileInputStream fis= newFileInputStream(file);
InputStreamReader isr= new InputStreamReader(fis);
二:此段程序是先声明一个StringBuffer对象,通过读取的字符来组成单词,当遇到
不是字母的时候得判断单词放入到一个HashMap中
intthechar;
StringBuffer word= newStringBuffer();
HashMap wordList = new HashMap();while ((thechar = isr.read()) != -1) {char letter = (char) thechar;if ((letter >= 'a' && letter <= 'z')|| (letter >= 'A' && letter <= 'Z')) {
word.append(letter);
}else if (word.length() != 0) {
String theword= newString(word);if(wordList.containsKey(theword)) {
wordList.put(theword, wordList.get(theword)+ 1);
}else{
wordList.put(theword,1);
}
word.delete(0, word.length());
}
}
isr.close();
三:将HashMap中的数据放到list中,利用Collections类提供的sort方法,根据自定义的Comparator来按照单词出现的频率从高到低显示,
此处利用Map对象的原理,将Map对象中的键值对组(Map.Entry)调出来排序
List> words = new ArrayList>(
wordList.entrySet());
Collections.sort(words,new Comparator>() {
@Overridepublic int compare(Entryo1,
Entryo2) {//按照出现频率排序由高到低
return - (o1.getValue() -o2.getValue());//按照字母顺序排序//return (o1.getKey()).toString().compareTo(o2.getKey());
}
});
四:下面是完整程序
importjava.io.File;importjava.io.FileInputStream;importjava.io.IOException;importjava.io.InputStreamReader;importjava.util.ArrayList;importjava.util.Collections;importjava.util.Comparator;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjava.util.Map.Entry;public classReadingTest {private static String path = "a.txt";public static void main(String[] args) throwsIOException {
File file= newFile(path);
FileInputStream fis= newFileInputStream(file);
InputStreamReader isr= newInputStreamReader(fis);//BufferedReader br = new BufferedReader(isr);//String data = null;
intthechar;
StringBuffer word= newStringBuffer();
HashMap wordList = new HashMap();while ((thechar = isr.read()) != -1) {char letter = (char) thechar;if ((letter >= 'a' && letter <= 'z')|| (letter >= 'A' && letter <= 'Z')) {
word.append(letter);
}else if (word.length() != 0) {
String theword= newString(word);if(wordList.containsKey(theword)) {
wordList.put(theword, wordList.get(theword)+ 1);
}else{
wordList.put(theword,1);
}
word.delete(0, word.length());
}
}
isr.close();//br.close();
System.out.println("排序前:");for(String key : wordList.keySet()) {
System.out.println(key+ " : " +wordList.get(key));
}
System.out.println("排序后:");int i = 0;for (Map.Entrynode : words) {if(i<10){
System.out.println(node.getKey()+ " : " +node.getValue());
}else{break;
}
i++;
}
}
}
完成一次实验需要对实验进行分析,设计,编码,测试等多个步骤,每一步都不可缺少,这样才能保证实验的完整性。
本文介绍了一个使用Java读取文档并统计每个单词出现频率的程序。通过HashMap存储单词和频率,然后转换为List并使用自定义Comparator按频率排序,展示频率最高的十个单词。程序包括文件读取、单词收集、频率统计、排序和输出。
4909

被折叠的 条评论
为什么被折叠?



