字符串:“448bbcccaaaa1111111***************”,找出出现次数最多的字符
解决办法:把字符串转换成字符数组,把出现的字符存到map中,出现的字符为key,次数为value,然后再在map中找到value最大的键值对,输出即可。
(思路源于http://blog.csdn.net/guyuealian/article/details/51933611)
import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; /** * 字符串中出现次数最多的字符 */ public class MaxNum_char { public static void main(String[] args){ String str = "448bbcccaaaa1111111***************"; char[] StrArr = str.toCharArray(); //把字符串转为字符数组toCharArray Map<Character,Integer> map = MapFunction(StrArr); FindMapMax_Value(map); } /** * MapFunction 实现将字符数组转存到Map中,其中,Map中的KEY为出现的字符,value对应字符出现的次数 * @param StrArr 字符数组,输入前必须先将字符串转为字符数组 * @return map集合中,key为出现的字符,value对应该字符出现的次数 */ public static Map<Character,Integer> MapFunction(char[] StrArr){ Map<Character,Integer> map = new HashMap<Character, Integer>(); if (!(StrArr == null||StrArr.length==0)){ //判断字符数组是否为空 for (int i=0;i<StrArr.length;i++){ if (null!=map.get(StrArr[i])){ //若不为空,说明已经存在相同的字符,则value值在原来的基础上加1 map.put(StrArr[i],map.get(StrArr[i])+1); } else map.put(StrArr[i],1); } } return map; } /** * * @param map 传入map,比较value */ public static void FindMapMax_Value(Map<Character, Integer> map){ //set集合 Set<Map.Entry<Character,Integer>> set_map = map.entrySet(); Iterator<Map.Entry<Character,Integer>> iterator = set_map.iterator(); //将第一个值设置为最大值 Character maxKey = iterator.next().getKey(); int maxValue = map.get(maxKey); while (iterator.hasNext()){ Character temp = iterator.next().getKey(); //和其他的比较,小于其他的就把最大值赋值为其他的key和value if (maxValue<map.get(temp)){ maxKey = temp; maxValue = map.get(maxKey); } } System.out.println("出现次数最多的字符:{"+maxKey+"} "+"出现次数:{"+maxValue+"}"); } }
出现次数最多的字符:{*} 出现次数:{15}