Java求字符串中出现次数最多的字符

Java求字符串中出现次数最多的字符

 

 

 【尊重原创,转载请注明出处】http://blog.csdn.net/guyuealian/article/details/51933611
     Java求字符串中出现次数最多的字符,如String Str = "aaabbcddddee";那么输出:d 4 ;若String Str = "aaabbcddddeexxxxxx";那么输出:x 6
    【思路】:首先将字符串拆分为字符数组,然后转存到HashMap集合中,该集合的key为字符串中出现的字符,value对应该字符出现的次数。最后只需要在HashMap集合中找到Value值最大的key即可。实现代码如下(PS:输出形式若有变化,自己修改哈)
[java] view plain copy
 
  1. import java.util.HashMap;  
  2. import java.util.Iterator;  
  3. import java.util.Map;  
  4. import java.util.Set;  
  5.   
  6. public class JavaTest {  
  7.     public static void main(String[] args) throws Exception {  
  8.         String Str = "AAbbcccaaaa";  
  9.         char[] StrArr = Str.toCharArray();// 把字符串转为字符数组toCharArray  
  10.   
  11.         Map<Character, Integer> map = MapFunction(StrArr);  
  12.         char ch = FindMapMaxValue(map);  
  13.     }  
  14.   
  15.     /** 
  16.      * MapFunction:实现将字符数组转存到Map中, 其中,Map中的key为出现的字符,value对应该字符出现的次数 
  17.      * @param StrArr  StrArr字符数组,输入前必须先将字符串转为字符数组 
  18.      * @return map 集合中,key为出现的字符(Character),value对应该字符出现的次数(Integer) 
  19.      */  
  20.     public static Map<Character, Integer> MapFunction(char[] StrArr) {  
  21.         Map<Character, Integer> map = new HashMap<Character, Integer>();  
  22.         if (!(StrArr == null || StrArr.length == 0))// 先判断字符数组是否为空  
  23.             for (int i = 0; i < StrArr.length; i++)  
  24.                 if (null != map.get(StrArr[i]))  
  25.                     // 若不为空,说明已经存在相同字符,则Value值在原来的基础上加1  
  26.                     map.put(StrArr[i], map.get(StrArr[i]) + 1);  
  27.                 else  
  28.                     map.put(StrArr[i], 1);  
  29.   
  30.         return map;  
  31.     }  
  32.   
  33.     /** 
  34.      * FindMapMaxValue 差找map中Value的最大值maxValue,类似于选择排序寻找最大值的过程: 
  35.      * 先任取一个Value值定义为最大值,然后与之比较 
  36.      * @param map 输入Map集合,该集合key为出现的字符(Character),value对应该字符出现的次数(Integer) 
  37.      * @return maxKey 返回出现次数最多的字符 
  38.      */  
  39.     public static Character FindMapMaxValue(Map<Character, Integer> map) {  
  40.         Set<Character> keys = map.keySet();// 获得所有key值  
  41.         Iterator keys_Itera = keys.iterator();// 实例化Iterator  
  42.         // keys_Itera.next():依次获得key值  
  43.         // map.get(key):获得对应的value值  
  44.         Character maxKey = (Character) keys_Itera.next();// 定义第一个为最大value和对应的key  
  45.         int maxValue = map.get(maxKey);  
  46.   
  47.         while (keys_Itera.hasNext()) {  
  48.             Character temp = (Character) keys_Itera.next();  
  49.             if (maxValue < map.get(temp)) {  
  50.                 maxKey = temp;  
  51.                 maxValue = map.get(temp);  
  52.             }  
  53.         }  
  54.         System.out.println("出现次数最多的字符:" + maxKey + " 出现次数:" + maxValue);  
  55.         return maxKey;  
  56.     }  
  57. }  
上面的FindMapMaxValue方法,还可以使用Map.Entry提高效率,进一步优化为:
[java] view plain copy
 
  1. public static char FindMapMaxValue(Map<Character, Integer> map) {  
  2.   
  3.     Iterator iter = map.entrySet().iterator();  
  4.     Map.Entry entry = (Map.Entry) iter.next();// 将第一个entry定义为最大次数的  
  5.     char maxKey = (char) entry.getKey();// 获得K  
  6.     int maxValue = (int) entry.getValue();// 获得V  
  7.     while (iter.hasNext()) {  
  8.         entry = (Map.Entry) iter.next();// 第二个entry  
  9.         char tempK = (char) entry.getKey();  
  10.         int tempV = (int) entry.getValue();  
  11.         if (maxValue < tempV) {  
  12.             maxKey = tempK;  
  13.             maxValue = tempV;  
  14.         }  
  15.     }  
  16.   
  17.     System.out.println("出现次数最多的字符:" + maxKey + " 出现次数:" + maxValue);  
  18.     return maxKey;  
  19. }  


 
 
类似的还可以这样:
[java] view plain copy
 
  1. import java.util.HashMap;  
  2. import java.util.Map;  
  3. public class JavaTest {  
  4.     public static void main(String[] args) throws Exception {  
  5.         String Str = "aaabbcddddee";  
  6.         char[] StrArr = Str.toCharArray();// 把字符串转为字符数组toCharArray  
  7.   
  8.         Map<Character, Integer> map = new HashMap<Character, Integer>();  
  9.         if (!(StrArr == null || StrArr.length == 0))// 先判断字符数组是否为空  
  10.             for (int i = 0; i < StrArr.length; i++)   
  11.                 if (null != map.get(StrArr[i]))  
  12.         // 若不为空,说明已经存在相同字符,则Value值在原来的基础上加1  
  13.                     map.put(StrArr[i], map.get(StrArr[i]) + 1);  
  14.                 else  
  15.                     map.put(StrArr[i], 1);  
  16.   
  17.         // 找map中Value的最大值maxValue,类似于选择排序,寻找最大值的过程:  
  18.         // 先任取一个Value值定义为最大值,然后与之比较  
  19.         int maxValue = map.get(StrArr[0]);  
  20.         char ch = ' ';  
  21.         for (int j = 0; j < StrArr.length; j++)  
  22.             if (maxValue < map.get(StrArr[j])) {  
  23.                 maxValue = map.get(StrArr[j]);  
  24.                 ch = StrArr[j];  
  25.             }  
  26.   
  27.         System.out.println("现次数最多的字符:" + ch + " 出现次数:" + maxValue);  
  28.     }  
  29. }  
 
0
posted @ 2017-06-22 12:42  皇问天  阅读(11049)  评论(1编辑  收藏  举报