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 明天就要英语考试了,小明明正在挑灯夜战背单词.小明明发现单词很难背,背一个忘一个.经过仔细研究,小明明发现单词 ...
随机推荐
- Codeforces Round #569 (Div. 2)A. Alex and a Rhombus
A. Alex and a Rhombus 题目链接:http://codeforces.com/contest/1180/problem/A 题目: While playing with geome ...
- python爬虫调用谷歌翻译接口
2019年7月4日15:53:17 (¦3[▓▓] 晚安 谷歌翻译环境 Python 3.6 第三方库 Execjs (pip install PyExecJS ) 文件列表 同目录下的四个文件: - ...
- HTTP&HTTPS
主要参考文档:<图解HTTP> HTTP简介 什么是HTTP? HTTP:(HyperText Transfer Protocol),超文本传输协议,是一个基于请求和响应,无状态的,应用层 ...
- eclipse的安装与使用方法
eclipse的安装与使用方法: eclipse是Java编程利器,工欲善其事必先利其器.下面我们来说说eclipse的安装与使用: 安装分三步: 第一步:安装eclipse 1.官网下载eclips ...
- Apache配置URL重定向
Apache配置URL重定向 修改/etc/httpd/conf/httpd.conf文件的内容 <Directory "/var/www"> AllowOverrid ...
- cocopods新建或者更新远端库主要操作步骤
1.搭建远程仓库(私有或者公有项目): 2.使用sourceTree拉去远程仓库: 3.打开拉去的项目仓库Finder,构建pod lib项目:pod lib create AFNetworking( ...
- vue.js 解决跨域问题
我们调试vue.js代码的时候一般都用chrome, 下载插件 进入chrome应用商店 搜索 重启chrome就可以解决跨域问题
- redis 基础数据结构实现
参考文献 redis数据结构分析 Skip List(跳跃表)原理详解 redis 源码分析之内存布局 Redis 基础数据结构与对象 Redis设计与实现-第7章-压缩列表 在redis中构建了自己 ...
- JVM中有哪些内存区域,分别是用来干什么的
前言 之前我们探讨过一个.class文件是如何被加载到jvm中的.但是jvm内又是如何划分内存的呢?这个内被加载到了那一块内存中?jvm内存划分也是面试当中必被问到的一个面试题. 什么是jvm内存区域 ...
- android_sdcard读写(一)
现在的android手机其实就是一个小小的掌上电脑,平时电脑有的硬件它估计也有了.这次本人研究下了其中充当手机硬盘的角色,就是sdcard.这是一个保存应用程序的好地方. 老规矩,上代码,学习代码才是 ...