需求:鍵盤錄入一個字符串,要求統計每個字符出現的次數。
分析:
①要統計每個字符出現的次數,可以利用HashMap的鍵值對(HashMap的一個基本知識點),鍵設置為字符,值為出現的次數
②注意:鍵是字符,應該用它的包裝類Character,而不用char 值也一樣,應用包裝類Integer
思路:
①鍵盤錄入一個字符串
②創建HashMap集合,鍵是Character,值是Integer
③遍歷字符串,得到每一個字符,利用方法 charAt(int index) 它的作用是獲得索引對於的字符 范圍是0-length-1
④拿得到的每一個字符作為鍵到HashMap集合中去找對於的值,看其返回值
如果返回null,則說明該字符在HashMap中不存在,就把它存入鍵中,並設置它的值為1了
如果返回不是null,則說明該字符在HashMap中存在,把其對應值加1,再重新存儲該字符和對應的值 //重新存儲便會出現鍵相同不覆蓋,值不同而被覆蓋
⑤遍歷HashMap集合,得到鍵和值,按要求進行拼接 運用到StringBuilder方法 利用其append拼接
⑥輸出結果
代碼實現:
package Collection.Map;
import java.util.*;
public class emergeCount {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入一個字符串:");
String s = sc.nextLine();
// HashMap<Character, Integer> hm = new HashMap<>();//HashMap存儲的鍵和值不會自動排序,而TreeMap和HashMap用法一致,但前者會進行自動排序
TreeMap<Character, Integer> hm = new TreeMap<>();
for (int i = 0; i < s.length(); i++) {
char key = s.charAt(i);//charAT返回指定索引處的char值索引范圍為1——length-1 並將遍歷得到的每一個字符設置為鍵(key)
Integer value = hm.get(key);//這里進行了自動裝箱動作,把基本類型char裝箱為了對應引用類型(也就是包裝類型Integer)
if (value == null) {
hm.put(key, 1);
} else {
value++;
hm.put(key, value);
}
}
StringBuilder sb = new StringBuilder();//StringBuilder方法更好輸出hashmap中的鍵值對
Set<Character> ks = hm.keySet();//獲取hashmap中的鍵 放入到set集合中
for (Character character : ks) {//增強For循環遍歷set集合
Integer value = hm.get(character);//獲取鍵所對應的值
sb.append(character).append("(").append(value).append(")");//將其拼接並輸出
}
String s1 = sb.toString();//將拼接后的字符轉換為字符串(字符+數字)
System.out.println(s1);
}
}
法二:統計字符串中出現最多的字符(只有大寫字母),並輸出,如果有同等最多,則按字母順序表輸出:
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
char[] chars=s.toCharArray();//將輸入得到的字符串轉換為字符數組
int[] arr=new int[26];
for (int i = 0; i < chars.length; i++) {
arr[(int)chars[i]-65]++;//0-25下標對應的是‘A’-‘Z’
}
int max=0;
for (int i = 0; i < arr.length; i++) {
if (arr[i]>max)//遍歷獲取出現次數最多的字母
max=arr[i];
}
for (int i = 0; i < arr.length; i++) {
if (arr[i]==max)
System.out.print((char)(i+65));//將數字0-25轉換為對應的‘A’-‘Z’
}