Java 求字符串中出现频率最高字符
前段时间接触的这个题目,大体理解了,还有些小地方仍待进一步品味,暂且记下。
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Collection;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.Map;
- import java.util.Set;
- /*
- * 查找字符串中出现频率最高的字符
- *
- * 主要思路:先将字符串存入set集合,以保证没有重复字符
- * 然后取出set集合中的每一个字符,并用String的indexOf()方法进行索引
- * 若索引不为-1,则说明该字符存在,记录其在字符串中的索引位置
- * 并将记录字符出现次数的变量++,再从当前索引位置+1处开始进行索引,
- * 直到索引值为-1,则退出循环,至此每个字符出现的频率都已记录
- * 接下来采用map进行字符与字符所对应的频率进行存储
- * 再将map的values形成一个ArrayList集合
- * 将计算得到的最大频率与map中的值进行比较
- * 若相等,则其为最大频率的字符
- */
- public class HighFrequencyWord {
- public static void findFrequencyWord(String str) {
- Collection<Integer> al=new ArrayList<Integer>();
- Map<String,Integer> map=new HashMap<String,Integer>();
- String tempStr = str;// 临时存储字符串
- String[] stringArray = str.split("");// 把字符串切成一个个字符
- // 无重复地存储字符串中出现的字符
- Set<String> set = new HashSet<String>();
- int stringLength = stringArray.length;
- for (int i = 0; i < stringLength; i++) {
- set.add(stringArray[i]);
- }
- // 移掉set中的一个空字符 (哪一个?什么意思??)
- set.remove("");
- System.out.println(set);// 这里输出为 [ , a, b, c]
- int count = 0;
- boolean flag = true;
- for (String s : set) {
- while (flag) {
- if (tempStr.indexOf(s) != -1) {// 若索引存在
- int index = tempStr.indexOf(s);// 记录字符的当前位置
- tempStr = tempStr.substring(index + 1);// 往后继续查询
- count++;
- } else {
- flag = false;// 如果索引不存在,赋值false退出循环
- }
- }
- flag = true;// 为了执行下一循环
- map.put(s,count);// 记录字符与其对应频率,并存放在map中
- // 初始化结果,为下次循环做准备
- count = 0;
- tempStr = str;
- }
- // 将map的value转为一个List
- al= map.values();
- // 再转为数组
- Integer[] stringCount =al.toArray(new Integer[]{});
- Arrays.sort(stringCount);// 按升序排序
- int countLength=stringCount.length;
- int max=stringCount[countLength-1];// 得到数组最大值(从小到大排序后最后一个即为出现频率最高的值)
- for(String s: set) {
- for(int i=0; i<countLength; i++){
- // 若map值与最大值相同,则输出
- if (map.get(s) == max) {
- System.out.println(s + ":" + max);// Q: 这样循环结果会输出多次,如何只输出一次??
- }
- }
- }
- }
- public static void main(String[] args) {
- findFrequencyWord("abab bc");
- }
- }
原文:http://www.2cto.com/kf/201205/133219.html,此处略有改动。
Java 求字符串中出现频率最高字符的更多相关文章
- Java求字符串中出现次数最多的字符
Java求字符串中出现次数最多的字符 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/51933611 Java ...
- 三种java 去掉字符串中的重复字符函数
三种java 去掉字符串中的重复字符函数 public static void main(string[] args) { system.out.println(removerepeatedchar( ...
- 使用Java判断字符串中的中文字符数量
Java判断一个字符串str中中文的个数,经过总结,有以下几种方法(全部经过验证),可根据其原理判断在何种情况下使用哪个方法: 1. char[] c = str.toCharArray(); for ...
- Java:求字符串中邻接的数字为一个整体
public static void main(String[] args) { String strNumbers = "0123456789";//用来进行判断数字的 Syst ...
- java 删除字符串中的特定字符
/** * Delete any character in a given String. * @param inString the original String * @param charsTo ...
- Java-Runoob-高级教程-实例-字符串:03. Java 实例 - 删除字符串中的一个字符
ylbtech-Java-Runoob-高级教程-实例-字符串:03. Java 实例 - 删除字符串中的一个字符 1.返回顶部 1. Java 实例 - 删除字符串中的一个字符 Java 实例 以 ...
- 使用 Java 查找字符串中出现次数最多的字符以及出现的次数?
使用 Java 查找字符串中出现次数最多的字符以及出现的次数? import java.util.HashMap; import java.util.Map; public class TestStr ...
- Java:判断字符串中包含某字符的个数
Java:判断字符串中包含某字符的个数 JAVA中查询一个词在内容中出现的次数: public int getCount(String str,String key){ if(str == null ...
- 1231: 删除字符串中指定的字符(Java)
WUSTOJ 1231: 删除字符串中指定的字符 题目 原题链接 Description 明天就要英语考试了,小明明正在挑灯夜战背单词.小明明发现单词很难背,背一个忘一个.经过仔细研究,小明明发现单词 ...
随机推荐
- springboot 2.X 在访问静态资源的的时候出现404的问题
通过idea快速搭建一个springboot项目: springboot版本2.1.6 在网上看的资料,springboot静态资源访问如下: "classpath:/META‐INF/re ...
- Kafka 学习之路(三)—— Kafka生产者详解
一.生产者发送消息的过程 首先介绍一下Kafka生产者发送消息的过程: Kafka会将发送消息包装为ProducerRecord对象, ProducerRecord对象包含了目标主题和要发送的内容,同 ...
- java源码解析之String类(五)
/* * 切片函数,非常重要,这里一定要牢记beginIndex是开始位置,endIndex是结束位置,区别于以前学的offset是开始位置,而count或length是个数和长度 * 比如说,new ...
- 系统学习 Java IO (十一)----打印流 PrintStream
目录:系统学习 Java IO---- 目录,概览 PrintStream 类可以将格式化数据写入底层 OutputStream 或者直接写入 File 对象. PrintStream 类可以格式化基 ...
- 记录微信浏览器里word链接点击没反应的bug
有用户反应点击下载附件时没有反应,让用户把该下载链接复制到微信对话框中,发现点击该链接仍然无反应,但是在内置的手机浏览器中打开是正常的而且可以下载. 链接地址,有需要的可以拿去进行测试: http:/ ...
- 项目中遇到的Redis缓存问题
1.Redis服务器 can not get resource from pool. 1000个线程并发还能跑,5000个线程的时候出现这种问题,查后台debug日志,发现redis 线程池不够.刚开 ...
- TensorFlow 2.0 入门教程实战案例
中文文档 TensorFlow 2 / 2.0 中文文档 知乎专栏 欢迎关注知乎专栏 https://zhuanlan.zhihu.com/geektutu 一.实战教程之强化学习 TensorFlo ...
- 50行Python代码,教你获取公众号全部文章
> 本文首发自公众号:python3xxx 爬取公众号的方式常见的有两种 - 通过搜狗搜索去获取,缺点是只能获取最新的十条推送文章 - 通过微信公众号的素材管理,获取公众号文章.缺点是需要申请自 ...
- 如何搭建一个vue项目(完整步骤)
参考资料 一.安装node环境 1.下载地址为:https://nodejs.org/en/ 2.检查是否安装成功:如果输出版本号,说明我们安装node环境成功 3.为了提高我们的效率,可以使用淘宝的 ...
- 浅谈SpringBoot
关于SpringBoot有哪些特性,SpringBoot官网是这么描述的: Features Create stand-alone Spring applications Embed Tomcat, ...