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 明天就要英语考试了,小明明正在挑灯夜战背单词.小明明发现单词很难背,背一个忘一个.经过仔细研究,小明明发现单词 ...
随机推荐
- Git--将已有的项目添加到github
(2). 初始化本地仓库,并提交内容到本地 需要先打开 命令行终端,然后通过 cd 命令切换到需要添加到github 的项目的目录下,然后依次执行如下命令, 具体命令及其含义如下: 1). touch ...
- Dart 异步编程相关概念简述
目录 isolate: event loop: Future: async/await: 总结 参考链接 学习 Dart 的异步编程时,需要对异步编程所涉及的相关知识体系进行梳理,我们可根据以下几 ...
- Java学习笔记——设计模式之七.模板方法模式
模板方法模式(TemplateMethod),定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 结构图: 代码: 算法骨架 ...
- 请使用迭代查找一个list中最小和最大值,并返回一个tuple
如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration). 在Python中,迭代是通过for ... in来完成的,而很多语 ...
- 真实项目中 ThreadLocal 的妙用
一.什么是 ThreadLocal ThreadLocal 提供了线程的局部变量,每个线程都可以通过 set() 和 get() 来对这个局部变量进行操作,但不会和其他线程的局部变量冲突,实现了线程间 ...
- Jenkins+svn+ftp自动化发布asp.net项目
今天将自己所掌握的(Jenkins+svn+ftp自动化发布asp.net项目)知识分享给大家,希望能帮组到大家: (1)先下载Jenkins并安装: (2)安装.Net所需要的插件: (3)配置插件 ...
- 常用的URL Scheme
系统 短信 sms:// app store itms-apps:// 电话 tel:// 备忘录 mobilenotes:// 设置 prefs:root=SETTING E-Mail MESSAG ...
- 剑指offer第二版-4.二维数组中的查找
面试题4:二维数组中的查找 题目要求: 一个二维数组中,每一行从左到右递增,每一列从上到下递增.输入一个整数,判断数组中是否含有该整数 /** * @since 2019年2月13日 下午5:08:5 ...
- 第二章 Session会话管理
采用网址重写的缺点: 在有些Web浏览器中,URL限制为2000个字符. 仅当有链接要插入值时,值才能转换成后面的资源.此外,要把值添加到静态页面的链接中,可不是一件容易的事情. 网址重写必须在服务器 ...
- list和list<map<String,object>>比较,不存在map的key赋值
package com; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDa ...