String text = " aaaaabbbacccdaaaabbbbccccaaa";
Pattern patten = Pattern.compile("[a-zA-Z]+");
// 用Pattern类中的matcher()方法,生成一个匹配器对象,Matcher类是匹配器类
String sbstring = text.toString();
Matcher matcher = patten.matcher(sbstring);
Map<String, Integer> tp = new TreeMap<String, Integer>();
while (matcher.find()) {
// 用Matcher类中的find()方法,查找与模式匹配的下一个子序列
String word = matcher.group();
// 用Matcher类中的group()方法, 返回匹配的子序列
if (tp.containsKey(word)) {
// 统计每个单词出现的次数
Integer wordfrequency = tp.get(word);
tp.put(word, wordfrequency + 1);
} else {
tp.put(word, 1);
}
}
/*
* 将treemap中的键值对的set视图存入ArrayList中,其中的类型必须是Map.Entry,
* 因为TreeMap中的entrySet()方法的返回类型就是Map.Entry类型,其实Map.Entry就是个接口。
* 将treemap存入ArrayList的目的就是用Collections类中的sort()方法进行排序,
* 其中的sort(List<T>list,Comparator)是按照指定的比较器进行排序
*/
List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(tp.entrySet());
/*
* 重写Comparator比较器,目的是让TreeMap按照value进行降序排列,这里的重写比较器用的是匿名类,
* 先创建实现Comparator接口的类,并重写其中的compare方法,并不是接口实例化了。
*/
Comparator<Map.Entry<String, Integer>> comparator = new Comparator<Map.Entry<String, Integer>>() {
// 如果是实现升序就是return(param1.getValue().compareTo(param2.getValue());
public int compare(Map.Entry<String, Integer> param1, Map.Entry<String, Integer> param2) {
return (param2.getValue().compareTo(param1.getValue()));
}
};
// 按照指定的比较器,对list列表进行升序或者降序排序
Collections.sort(list, comparator);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).getKey()+list.get(i).getValue());
}