一、统计字符出现的次数
import java.util.*;
public class MapDemo2 {
public static void main(String[] args) {
String str = "joahgigaojghaougaoignahiohganignaojiai7";
//1、 将String 转成char[]
char[] ch = str.toCharArray();
// 2、遍历数组,利用map统计每个字符的出现次数。
Map<Character,Integer> map = new HashMap<>();
// 遍历数组
for(char c:ch){
// 将元素作为key,出现的频次作为value存入map
if(map.containsKey(c)){
Integer value = map.get(c)+1;
map.put(c,value);
}else {
map.put(c,1);
}
}
// 3、排序
Set<Map.Entry<Character, Integer>> entries = map.entrySet();
// entries 是一个Set集合(无序的),每个元素是一个Entry
// 想要排序,就要用到Collections.sort,这里需要传List集合。
// 所以我们先把Set集合转成List集合
// 然后自己写比较器
List<Map.Entry<Character, Integer>> list = new ArrayList<Map.Entry<Character, Integer>>(entries);
Collections.sort(list,new MyCompare());
System.out.println(list);
for(Map.Entry<Character, Integer> e:list){
System.out.println(e.getKey()+":"+e.getValue());
}
}
}
class MyCompare implements Comparator<Map.Entry<Character, Integer>>{
@Override
public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
return o2.getValue()-o1.getValue();
}
}
二、java统计一个小说字符出现的次数
package day04.io_class;
/*
统计一本小说,每个字符的出现次数,并排序,输出top10
小说GBK的编码
*/
import com.google.common.collect.Maps;
import java.io.*;
import java.util.*;
public class EX2 {
public static void main(String[] args){
try(
BufferedReader in = new BufferedReader(
new InputStreamReader(
new BufferedInputStream(
new FileInputStream("斗罗大陆.txt")),"GBK"));){
String str = null;
HashMap<Character, Integer> map = Maps.newHashMap();
while ((str=in.readLine())!=null){
count(str,map);
}
// 排序,要先转成list集合
List<Map.Entry<Character,Integer>> list = new ArrayList<>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<Character, Integer>>() {
@Override
public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
return o2.getValue()-o1.getValue();
}
});//sort要传一个比较器,这里直接用内部类(匿名内部类)
//打印前10个
for(int i =0;i<10;i++){
Map.Entry<Character, Integer> entry = list.get(i);
System.out.println(entry.getKey()+":"+entry.getValue());
}
}catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void count(String str, Map<Character,Integer> map){
for(int i =0;i<str.length();i++){
char c=str.charAt(i);
Integer value=map.get(c);
value=value==null?1:value+1;
map.put(c,value);
}
}
}