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 明天就要英语考试了,小明明正在挑灯夜战背单词.小明明发现单词很难背,背一个忘一个.经过仔细研究,小明明发现单词 ...
随机推荐
- Python自学day-9
一.paramiko模块 (第三方模块,需安装依赖包) paramiko模块基于SSH来连接远程主机并进行相关操作. SSHClient:用于连接远程主机并执行基本命令. import paramik ...
- chrome如何查看cookie
以mac为例: 第一步:点击chrome的偏好设置 第二步:点击如下图所示的最下面的高级 第三步:点击内容设置,如下所示 第四步:点击cookie,就会出现查看所有cookie和网站数据
- SqlServer导入大文件Sql
sqlcmd -S "192.168.1.218" -U "sa" -P "1qaz~xsw2" -d "SispMain&quo ...
- 小范笔记:ASP.NET Core API 基础知识与Axios前端提交数据
跟同事合作前后端分离项目,自己对 WebApi 的很多知识不够全,虽说不必要学全栈,可是也要了解基础知识,才能合理设计接口.API,方便与前端交接. 晚上回到宿舍后,对 WebApi 的知识查漏补缺, ...
- CentOS 网络互通情况下把一个Linux服务器的文件发送到另一个服务器
scp -r 文件名/目录名 root@192.168.2.144:/home/hsw -r 发送目录使用,表示把该目录下的所有子目录以及文件发送过去
- 解决FileExplorer窗口变小问题
3.解决FileExplorer窗口变小问题 须在$HOME/.vimrc中添加: "解决FileExplorer窗口变小问题 let g:bufExplorerMaxHeight=30 l ...
- dij模板
#include<cstdio> #include<vector> #include<queue> using namespace std; struct edge ...
- 洛谷P2001 硬币的面值 题解
题目链接:https://www.luogu.org/problemnew/show/P2001 这题的数据范围吓得我很慌. 分析: 这道题蒟蒻本来想用背包的,但是发现m太大,一写肯定炸,然后看到数据 ...
- 洛谷P4994 终于结束的起点 题解
求赞,求回复,求关注~ 题目:https://www.luogu.org/problemnew/show/P4994 这道题和斐波那契数列的本质没有什么区别... 分析: 这道题应该就是一个斐波那契数 ...
- Method has too many Body parameters openfeign
feign 调用问题,最新版本的feign和旧版本的稍微有一些不一样,具体如下(eureka 作为服务发现与注册 ) 依赖: compile('io.github.openfeign:feign-ja ...