前段时间接触的这个题目,大体理解了,还有些小地方仍待进一步品味,暂且记下。

  1. import java.util.ArrayList;
  2. import java.util.Arrays;
  3. import java.util.Collection;
  4. import java.util.HashMap;
  5. import java.util.HashSet;
  6. import java.util.Map;
  7. import java.util.Set;
  8.  
  9. /*
  10. * 查找字符串中出现频率最高的字符
  11. *
  12. * 主要思路:先将字符串存入set集合,以保证没有重复字符
  13. * 然后取出set集合中的每一个字符,并用String的indexOf()方法进行索引
  14. * 若索引不为-1,则说明该字符存在,记录其在字符串中的索引位置
  15. * 并将记录字符出现次数的变量++,再从当前索引位置+1处开始进行索引,
  16. * 直到索引值为-1,则退出循环,至此每个字符出现的频率都已记录
  17. * 接下来采用map进行字符与字符所对应的频率进行存储
  18. * 再将map的values形成一个ArrayList集合
  19. * 将计算得到的最大频率与map中的值进行比较
  20. * 若相等,则其为最大频率的字符
  21. */
  22. public class HighFrequencyWord {
  23.  
  24. public static void findFrequencyWord(String str) {
  25. Collection<Integer> al=new ArrayList<Integer>();
  26. Map<String,Integer> map=new HashMap<String,Integer>();
  27.  
  28. String tempStr = str;// 临时存储字符串
  29. String[] stringArray = str.split("");// 把字符串切成一个个字符
  30.  
  31. // 无重复地存储字符串中出现的字符
  32. Set<String> set = new HashSet<String>();
  33. int stringLength = stringArray.length;
  34.  
  35. for (int i = 0; i < stringLength; i++) {
  36. set.add(stringArray[i]);
  37. }
  38.  
  39. // 移掉set中的一个空字符 (哪一个?什么意思??)
  40. set.remove("");
  41.  
  42. System.out.println(set);// 这里输出为 [ , a, b, c]
  43.  
  44. int count = 0;
  45. boolean flag = true;
  46.  
  47. for (String s : set) {
  48. while (flag) {
  49. if (tempStr.indexOf(s) != -1) {// 若索引存在
  50. int index = tempStr.indexOf(s);// 记录字符的当前位置
  51. tempStr = tempStr.substring(index + 1);// 往后继续查询
  52. count++;
  53. } else {
  54. flag = false;// 如果索引不存在,赋值false退出循环
  55. }
  56. }
  57. flag = true;// 为了执行下一循环
  58. map.put(s,count);// 记录字符与其对应频率,并存放在map中
  59.  
  60. // 初始化结果,为下次循环做准备
  61. count = 0;
  62. tempStr = str;
  63. }
  64.  
  65. // 将map的value转为一个List
  66. al= map.values();
  67. // 再转为数组
  68. Integer[] stringCount =al.toArray(new Integer[]{});
  69.  
  70. Arrays.sort(stringCount);// 按升序排序
  71.  
  72. int countLength=stringCount.length;
  73. int max=stringCount[countLength-1];// 得到数组最大值(从小到大排序后最后一个即为出现频率最高的值)
  74.  
  75. for(String s: set) {
  76. for(int i=0; i<countLength; i++){
  77. // 若map值与最大值相同,则输出
  78. if (map.get(s) == max) {
  79. System.out.println(s + ":" + max);// Q: 这样循环结果会输出多次,如何只输出一次??
  80. }
  81. }
  82. }
  83.  
  84. }
  85.  
  86. public static void main(String[] args) {
  87. findFrequencyWord("abab bc");
  88. }
  89. }

原文:http://www.2cto.com/kf/201205/133219.html,此处略有改动。

Java 求字符串中出现频率最高字符的更多相关文章

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

    Java求字符串中出现次数最多的字符  [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/51933611      Java ...

  2. 三种java 去掉字符串中的重复字符函数

    三种java 去掉字符串中的重复字符函数 public static void main(string[] args) { system.out.println(removerepeatedchar( ...

  3. 使用Java判断字符串中的中文字符数量

    Java判断一个字符串str中中文的个数,经过总结,有以下几种方法(全部经过验证),可根据其原理判断在何种情况下使用哪个方法: 1. char[] c = str.toCharArray(); for ...

  4. Java:求字符串中邻接的数字为一个整体

    public static void main(String[] args) { String strNumbers = "0123456789";//用来进行判断数字的 Syst ...

  5. java 删除字符串中的特定字符

    /** * Delete any character in a given String. * @param inString the original String * @param charsTo ...

  6. Java-Runoob-高级教程-实例-字符串:03. Java 实例 - 删除字符串中的一个字符

    ylbtech-Java-Runoob-高级教程-实例-字符串:03. Java 实例 - 删除字符串中的一个字符 1.返回顶部 1. Java 实例 - 删除字符串中的一个字符  Java 实例 以 ...

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

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

  8. Java:判断字符串中包含某字符的个数

    Java:判断字符串中包含某字符的个数 JAVA中查询一个词在内容中出现的次数: public int getCount(String str,String key){ if(str == null ...

  9. 1231: 删除字符串中指定的字符(Java)

    WUSTOJ 1231: 删除字符串中指定的字符 题目 原题链接 Description 明天就要英语考试了,小明明正在挑灯夜战背单词.小明明发现单词很难背,背一个忘一个.经过仔细研究,小明明发现单词 ...

随机推荐

  1. springboot 2.X 在访问静态资源的的时候出现404的问题

    通过idea快速搭建一个springboot项目: springboot版本2.1.6 在网上看的资料,springboot静态资源访问如下: "classpath:/META‐INF/re ...

  2. Kafka 学习之路(三)—— Kafka生产者详解

    一.生产者发送消息的过程 首先介绍一下Kafka生产者发送消息的过程: Kafka会将发送消息包装为ProducerRecord对象, ProducerRecord对象包含了目标主题和要发送的内容,同 ...

  3. java源码解析之String类(五)

    /* * 切片函数,非常重要,这里一定要牢记beginIndex是开始位置,endIndex是结束位置,区别于以前学的offset是开始位置,而count或length是个数和长度 * 比如说,new ...

  4. 系统学习 Java IO (十一)----打印流 PrintStream

    目录:系统学习 Java IO---- 目录,概览 PrintStream 类可以将格式化数据写入底层 OutputStream 或者直接写入 File 对象. PrintStream 类可以格式化基 ...

  5. 记录微信浏览器里word链接点击没反应的bug

    有用户反应点击下载附件时没有反应,让用户把该下载链接复制到微信对话框中,发现点击该链接仍然无反应,但是在内置的手机浏览器中打开是正常的而且可以下载. 链接地址,有需要的可以拿去进行测试: http:/ ...

  6. 项目中遇到的Redis缓存问题

    1.Redis服务器 can not get resource from pool. 1000个线程并发还能跑,5000个线程的时候出现这种问题,查后台debug日志,发现redis 线程池不够.刚开 ...

  7. TensorFlow 2.0 入门教程实战案例

    中文文档 TensorFlow 2 / 2.0 中文文档 知乎专栏 欢迎关注知乎专栏 https://zhuanlan.zhihu.com/geektutu 一.实战教程之强化学习 TensorFlo ...

  8. 50行Python代码,教你获取公众号全部文章

    > 本文首发自公众号:python3xxx 爬取公众号的方式常见的有两种 - 通过搜狗搜索去获取,缺点是只能获取最新的十条推送文章 - 通过微信公众号的素材管理,获取公众号文章.缺点是需要申请自 ...

  9. 如何搭建一个vue项目(完整步骤)

    参考资料 一.安装node环境 1.下载地址为:https://nodejs.org/en/ 2.检查是否安装成功:如果输出版本号,说明我们安装node环境成功 3.为了提高我们的效率,可以使用淘宝的 ...

  10. 浅谈SpringBoot

    关于SpringBoot有哪些特性,SpringBoot官网是这么描述的: Features Create stand-alone Spring applications Embed Tomcat, ...