案例讲解:有一个字符串,其中包含中文字符、英文字符和数字字符, 请统计和打印出各个字符的个数,并打印最高次数的字符

案例讲解:有一个字符串,其中包含中文字符、英文字符和数字字符, 请统计和打印出各个字符的个数,并打印最高次数的字符

解题思路:

一:统计和打印出各个字符的个数:

思考:统计字符和个数,可以考虑用HashMap集合对其进行操作,以字符串作为键,把出现的次数作为value值,就要考虑怎么将字符串添加到map中;

​ 转成char数组,拿到每一个字符

  • 将拿到的字符传给新建的map集合

  • 将每个字符做为map 的键值,value值为1

  • 判断后续传进来的值是否包含的有,如果有就将键的次数加1

    二:统计最高次数

    思考:要统计最高次数,那就要去找到最高次数的键值,那么记录次数的是什么,是value值,那将最高次数的键值与value进行比较 相等就打印这对键值

    1 拿到map集合的value值,

    2 将拿到的value值转化为数组

    3 对数组进行排序选出最大值

    4 选出最大值(此时数组中的最大索引对应的值就是最大值)

    5 将最大值与value进行比较 相等就打印这对键值

public class Test {
     
	public static void main(String[] args) {
     
		//创建一个map对象
		HashMap<Object, Integer> map = new HashMap();
		//定义一个字符串
		String str="姜子牙jiuyaoshangyyingl1001";
		//转为char数组 拿到每一个字符
		char[] cs = str.toCharArray();
		//将每个字符装入到map中
		for (char c : cs) {
     
			//判断添加到map中的键有无重复的,有就把键的次数+1作为value值
			if (map.containsKey(c)) {
     
				map.put(c, map.get(c)+1);
			} else {
     
				//如果字符第一次出现, 就以该字符为key,value为1
				map.put(c, 1);
			}
		}
		System.out.println(map);//{a=2, g=2, h=1, i=2, j=1, l=1, n=2, o=1, 子=1, 0=2, 1=2, s=1, u=1, 牙=1, y=3, 姜=1}
		//拿到value值
		Collection<Integer> values = map.values();
		//将拿到的value值转化为数组
		Object[] array = values.toArray();
		//对数组进行排序选出最大值
		Arrays.sort(array);
		//选出最大值
		Object max=array[array.length-1];
		//将最大值与value进行比较 相等就打印这对键值
		Set<Object> set = map.keySet();
		for (Object object : set) {
     
			if (map.get(object)==max) {
     
				System.out.println(object+":"+map.get(object));//y:3
			}
		}
	}
}

你可能感兴趣的:(java)