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.TreeMap;import java.util.regex.Matcher;import java.util.regex.Pattern;public class WordsCounter { public static void main(String[] args) throws Exception { BufferedReader reader = new BufferedReader(new FileReader( "main.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);// Mapmap = 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 >( map.entrySet()); /* * 定义排序规则,按照Entry的Value排序 */ Comparator > comparator = new Comparator >() { public int compare(Map.Entry left, Map.Entry right) { return (left.getValue()).compareTo(right.getValue()); } }; // 利用Collections类的sort方法来排序,按照自定义的规则排序 Collections.sort(list, comparator); // 打印最多五个 int last = list.size() - 1; for (int i = last; i > last - 5; i--) { String key = list.get(i).getKey(); Integer value = list.get(i).getValue(); System.out.println(key + " :" + value); } }}