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());

}

12-02 15:32