字符串出现次数最多的字母和次数(补充)

基于寻找字符串中次数最多的字母的优化

考虑的不是太全面,欢迎评论留言给出建议。

查找思路请点击下面的博客连接
https://blog.csdn.net/quaint_csdn/article/details/84102258

/*
* 程序入口
 */
public static void main(String[] args){
	String str = "quaint,hello www WWWord!";
	System.out.println("原字符串为:"+str);
	System.out.println(getMaxCharAndNum(str));
}
/*
 * 寻找一个字符串中出现次数最多的  字母
 * 原理:	通过字符串分割函数分割字符串,判断分割后的长度来比较字母的次数.
 */
public static String getMaxCharAndNum(String str){
	//存储最多出现的次数
	int maxNum = 0;
	//存储出现最多的字母
	StringBuilder maxChar = new StringBuilder();
	//对字符串中不是字母的进行删除,还有重复的字母删除,减少迭代次数
	String str_Iterator = removeOtherChar(str);
	System.out.println("去除重复和非字母元素为:"+str_Iterator);
	//防止最后全部一样分割不出来,随便加一个特殊符号
	str+="/";
	for (int i = 0;i<str_Iterator.length();i++) {
		//获取迭代的每一个字符,char-->String 加了一个空字符串
		String str_i = str_Iterator.charAt(i)+"";
		//对原字符分割后得到数组
		String[] strs = str.split(str_i);
		//判断数组的长度,这里字符串出现一次会分成两个数组,所以字符串个数为数组长度减一
		if(strs.length-1>maxNum){
			//清空StringBuilder
			maxChar.setLength(0);
			maxChar.append(str_i);
			maxNum = strs.length-1;
		}else if(strs.length-1==maxNum){
			//如果有多个字母出现的次数相等,那么","隔开
			maxChar.append(","+str_i);
		}
	}
	if(maxChar.length()==0){
		maxChar.append("字符串中未包含字母!");
	}else{
		maxChar.append(" 出现次数为:"+maxNum);
	}
	return maxChar.toString();
}
/*
 * 移除重复的字符,和非字母字符
 */
public static String removeOtherChar(String str){
	//如果为空,则不再进行下面的步骤
	if("".equals(str)||str==null){
		return "";
	}
	StringBuilder sb = new StringBuilder();
	char str_i;
	int length = str.length();
	for(int i = 0;i<length;i++){
		str_i = str.charAt(i);
		//如果是字母,在考虑判断是否重复
		if((str_i>'a' &&str_i<'z')||(str_i>'A'&&str_i<'Z')){
			//如果没添加过(找不到结果为负),那么就再次添加.
			if(sb.indexOf(str_i+"")<0){
				sb.append(str_i);
			}
		}
	}
	return sb.toString();
}

样例的执行结果:
原字符串为:quaint,hello www WWWord!
去除重复和非字母元素为:quinthelowWrd
w,W 出现次数为:3

猜你喜欢

转载自blog.csdn.net/quaint_csdn/article/details/84103674