找出并统计任意字符串中出现最多的字符

一个字符串中可能包含a~z中的多个字符,如有重复,求出现次数最多的那个字母及次数,如有多个重复则都求出来。
/**/ /*
*Main.java
*
*Createdon2007-9-28,22:39:31
*
*Tochangethistemplate,chooseTools|Templates
*andopenthetemplateintheeditor.
*/


package test;

import java.util. * ;

/***/ /**
*
*
@authorJeffery
*/

public class Main ... {

/***//**
*
@paramargsthecommandlinearguments
*/

publicstaticvoidmain(String[]args)...{
Stringinput
="aavzcadfdsfsdhshgWasdfasdfdddaaa";
newMain().doString(input);
}


publicvoiddoString(Stringinput)...{
char[]chars=input.toCharArray();
ArrayList
<String>lists=newArrayList<String>();
TreeSet
<String>set=newTreeSet<String>();
for(inti=0;i<chars.length;i++)...{
lists.add(String.valueOf(chars[i]));
set.add(String.valueOf(chars[i]));
}

System.out.println(set);
Collections.sort(lists);
System.out.println(lists);


StringBuffersb
=newStringBuffer();
for(inti=0;i<lists.size();i++)...{
sb.append(lists.get(i));
}


input
=sb.toString();
System.out.println(input);
intmax=0;
StringmaxString
="";
ArrayList
<String>maxlist=newArrayList<String>();

Iterator
<String>its=set.iterator();
while(its.hasNext())...{
Stringos
=its.next();
intbegin=input.indexOf(os);
intlast=input.lastIndexOf(os);
intvalue=last-begin+1;

if(value>max)...{
max
=value;
maxString
=os;
maxlist.add(os);
}
elseif(value==max)...{
maxlist.add(os);
}

}

intindex=0;
for(inti=0;i<maxlist.size();i++)...{
if(maxlist.get(i).equals(maxString))...{
index
=i;
break;
}

}


System.out.print(
"Themostoccuredcharacteris");
for(inti=index;i<maxlist.size();i++)...{
System.out.print(maxlist.get(i)
+"");
}

System.out.println();
System.out.println(
"Theyoccured"+max+"times");
}

}
小结:
引入TreeSet:通过集合快速找到所有出现的字符,去除冗余;
引入ArrayList,使用快速排序,生成排序后的字符串;
如果频繁修改操作String,建议用StringBuffer类;
如果出现次数相同,则把相应的字符都记录到一个新的List里面;
使用泛型,可以大大降低出错的概率,减少类型转换可能带来的问题。

你可能感兴趣的:(OS)