zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    C# 利用DataTable批处理数据导入数据库
    人员基础信息一体化采集系统建设方案
    定时调用WebService方法同步数据
    进程间通信
    信号
    Linux进程基础
    来自硬件男的《信号与系统》整理笔记
    shell脚本编程(ubantu)
    Linux系统c语言开发环境
    Linux系统用户管理及VIM配置
  • 原文地址:https://www.cnblogs.com/huangwentian/p/7064348.html
Copyright © 2011-2022 走看看