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

类似的还可以这样:

  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. Map<Character, Integer> map = new HashMap<Character, Integer>();
  8. if (!(StrArr == null || StrArr.length == 0))// 先判断字符数组是否为空
  9. for (int i = 0; i < StrArr.length; i++)
  10. if (null != map.get(StrArr[i]))
  11. // 若不为空,说明已经存在相同字符,则Value值在原来的基础上加1
  12. map.put(StrArr[i], map.get(StrArr[i]) + 1);
  13. else
  14. map.put(StrArr[i], 1);
  15. // 找map中Value的最大值maxValue,类似于选择排序,寻找最大值的过程:
  16. // 先任取一个Value值定义为最大值,然后与之比较
  17. int maxValue = map.get(StrArr[0]);
  18. char ch = ' ';
  19. for (int j = 0; j < StrArr.length; j++)
  20. if (maxValue < map.get(StrArr[j])) {
  21. maxValue = map.get(StrArr[j]);
  22. ch = StrArr[j];
  23. }
  24. System.out.println("现次数最多的字符:" + ch + " 出现次数:" + maxValue);
  25. }
  26. }
 
0

Java求字符串中出现次数最多的字符的更多相关文章

  1. 使用 Java 查找字符串中出现次数最多的字符以及出现的次数?

    使用 Java 查找字符串中出现次数最多的字符以及出现的次数? import java.util.HashMap; import java.util.Map; public class TestStr ...

  2. java一个字符串中出现次数最多的字符以及次数

    学习了别人的方法,觉得挺巧妙的.就是每次取出字符串的第一个字符,将字符串中与第一个字符相同的字符全部删除掉,然后通过计算删除前后字符串的长度来确定该字符在字符串中出现的次数,最终比较出出现最多次的字符 ...

  3. JS查找字符串中出现次数最多的字符

    本文给大家带来两种js中查找字符串中出现次数最多的字符,在这两种方法中小编推荐使用第二种,对js查找字符串出现次数的相关知识感兴趣的朋友一起看看吧   在一个字符串中,如 'zhaochucichuz ...

  4. js面试之一个字符串中出现次数最多的字符是?出现几次?

    最近在找面试题的时候发现了许多有趣的题目,在这里用随笔记录下~ 关于“一个字符串中出现次数最多的字符...”这种问题在笔试题中出现的频率还是很高的,我自己也找到了几种方法处理 var str = &q ...

  5. js判断一个字符串中出现次数最多的字符及次数

    最近面试总是刷到这个题,然后第一次的话思路很乱,这个是我个人思路 for循环里两个 if 判断还可以优化 var maxLength = 0; var maxStr = ''; var count = ...

  6. JavaScript判断字符串中出现次数最多的字符,并统计其次数

    要求: 输出一个给定字符串``中出现次数最多的字符,并统计其次数. 实现思路: 利用charA()遍历这个字符串 把每个字符都存储给对象,如果对象没有该属性,就先幅值为1,如果存在了就+1 遍历对象, ...

  7. JS-取出字符串中重复次数最多的字符并输出

    /** 取出字符串中重复字数最多的字符 */ var words = 'sdfghjkfastgbyhnvdstyaujskgfdfhlaa'; //创建字符串 var word, //单个字符 le ...

  8. js常会问的问题:找出字符串中出现次数最多的字符。

    一.循环obj let testStr = 'asdasddsfdsfadsfdghdadsdfdgdasd'; function getMax(str) { let obj = {}; for(le ...

  9. js-查找字符串中出现次数最多的字符

    假设有一个字符串,下面让我们一起来查找出现次数最多的字符 var str = 'asdfssaaasasasasaa'; 首先,我们定义一个Object用来存放拆分的字符串,然后遍历字符串. 判断ob ...

随机推荐

  1. python大战机器学习——聚类和EM算法

    注:本文中涉及到的公式一律省略(公式不好敲出来),若想了解公式的具体实现,请参考原著. 1.基本概念 (1)聚类的思想: 将数据集划分为若干个不想交的子集(称为一个簇cluster),每个簇潜在地对应 ...

  2. 使用CSS3的translate和transition功能,控制一个两个div块的联动

    之前的工作有接触到一些css3的新特性.div块的移动和回到初始位置,可以利用在开发中的很多地方.这里记录下来,下次就不用辛苦的灾区百度了. <html> <head> < ...

  3. DevExpress PivotGrid 使用记录

    1.自定total值: 调试的时候,如果要定位,给一个index,然后,把e.CustomVale=index++;定位后,监视ds的值,每个ds的值不一样!

  4. 洛谷P3928 SAC E#1 - 一道简单题 Sequence2

    提交地址 题目背景 小强和阿米巴是好朋友. 题目描述 小强喜欢数列.有一天,他心血来潮,写下了三个长度均为n的数列. 阿米巴也很喜欢数列.但是他只喜欢其中一种,波动数列. 阿米巴把他的喜好告诉了小强. ...

  5. 一、Postgresql的基本操作

    ---------------------------------------------------------------------------------------------------- ...

  6. 使用 xib 设置 button 等款等高

    很多时候需要使用平分的控件来布局,当然xib中可以之间使用 UIToolBar 使用 UIBarButtonItem 添加弹簧即可完成平均分布 但是,直接使用 button 也可以实现平均布局

  7. 最全的Spring注解详解

    @Configuration : 配置类 == 配置文件,告诉Spring这是一个配置类@ComponentScan(value="com.atguigu",excludeFilt ...

  8. PHP变量、数据类型、字符串、运算符、条件语句、循环语句、数组、函数

    PHP 简介: php :是一门动态交互的计算机语言  静态交互 html  css  js 但凡是动态交互的 都需要服务器. php都是以.php结尾的文件 Html文件里不能写php代码,但是ph ...

  9. iOS Programming Autorotation, Popover Controllers, and Modal View Controllers

    iOS Programming Autorotation, Popover Controllers, and Modal View Controllers  自动旋转,Popover 控制器,Moda ...

  10. JAVA-WEB总结02

     1 什么是JavaBean?有何特征?    1)符合特定规则的类    2)JavaBean分二类: a)侠义的JavaBean .私有的字段(Field) .对私有字段提供存取方法(读写方法) ...