舉例:比如,輸入 kkddpppp00j09933
輸出:
p:4
0:3
k:2
d:2
3:2
j:1
思路:1.使用map集合保存每個字符出現的數量,后續需要根據出現的數量進行降序排列(排序)
2.集合排序:對list集合排序 Collections.sort(list,Comparator)
3.將map集合中的k-v數據保存到list集合中,從而對list排序
1 import java.util.*; 2 3 /** 4 * 統計字符串中字符出現的次數並按照次數降序輸出 5 */ 6 public class CountCharDemo { 7 public static void main(String[] args) { 8 Scanner scanner = new Scanner(System.in); 9 System.out.println("請輸入任意字符串"); 10 String str = scanner.next(); 11 //轉換得到字符數組表示 12 char[] chs = str.toCharArray(); 13 //創建Map集合保存字符出現的次數 14 Map<Character,Integer> map = new HashMap<>(); 15 //遍歷字符數組,判斷字符是否出現在map中,若出現,則次數+1, 16 //否則將字符存入map,並將次數設為1 17 for (char c:chs) { 18 if(map.containsKey(c)){ 19 map.put(c,map.get(c)+1); 20 }else { 21 map.put(c,1); 22 } 23 } 24 // map.forEach((k,v)-> System.out.println(k+"-"+v)); 25 //對map中的鍵值對數據根據value(次數)降序排列 26 //將map中的所有k-v數據存入list,然后對list排序即可 27 List<Map.Entry<Character,Integer>> list = 28 new ArrayList<>(map.entrySet()); 29 Collections.sort(list, 30 new Comparator<Map.Entry<Character, Integer>>() { 31 @Override 32 public int compare(Map.Entry<Character, Integer> o1, 33 Map.Entry<Character, Integer> o2) { 34 return o2.getValue()-o1.getValue(); 35 } 36 }); 37 //遍歷list 38 for (Map.Entry<Character,Integer> entry:list) { 39 System.out.println(entry); 40 } 41 } 42 }