Java 字符串计算频率出现最高的字符
Posted zhchoutai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 字符串计算频率出现最高的字符相关的知识,希望对你有一定的参考价值。
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("");
System.out.println(" stringArray.length = "+stringArray.length);
//用来存储字符串里每一个出现过的字符,且不会出现反复的
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);
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);
//假设索引存在,记录值加1
count++;
} else {
//假设索引不存在,赋值false退出循环
flag = false;
}
}
//为了运行下一循环
flag = true;
//把值存入map,让字符与其频率相应
map.put(s,count);
//由于是上一结果,所以让值归零,而且字符串变回原来的字符串
count = 0;
tempStr = str;
}
//将map的值变为一个列表
al= map.values();
//然后转为数组
Integer[] stringCount =al.toArray(new Integer[]{});
int countLength=stringCount.length;
//按升序排序
Arrays.sort(stringCount);
//得到数组最大值
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);
}
}
}
}
public static void main(String[] args) {
findFrequencyWord("ababbsssss");
}
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("");
System.out.println(" stringArray.length = "+stringArray.length);
//用来存储字符串里每一个出现过的字符,且不会出现反复的
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);
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);
//假设索引存在,记录值加1
count++;
} else {
//假设索引不存在,赋值false退出循环
flag = false;
}
}
//为了运行下一循环
flag = true;
//把值存入map,让字符与其频率相应
map.put(s,count);
//由于是上一结果,所以让值归零,而且字符串变回原来的字符串
count = 0;
tempStr = str;
}
//将map的值变为一个列表
al= map.values();
//然后转为数组
Integer[] stringCount =al.toArray(new Integer[]{});
int countLength=stringCount.length;
//按升序排序
Arrays.sort(stringCount);
//得到数组最大值
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);
}
}
}
}
public static void main(String[] args) {
findFrequencyWord("ababbsssss");
}
以上是关于Java 字符串计算频率出现最高的字符的主要内容,如果未能解决你的问题,请参考以下文章
用java编成,实现从键盘输入一个字符串,统计出现频率最高的字符
求一个程序,要求是: 设计一个函数,以字符串为参数,返回该字符串中出现频率最高的字符。