一个字符串中可能包含a~z中的多个字符,如有重复,求出现次数最多的那个字母及次数,如有多个重复则都求出来。
/**/
/* * Main.java * * Created on 2007-9-28, 22:39:31 * * To change this template, choose Tools | Templates * and open the template in the editor. */
package
test;
import
java.util.
*
;
/** */
/** * * @author Jeffery */
public
class
Main
...
{ /** *//** * @param args the command line arguments */ public static void main(String[] args) ...{ String input = "aavzcadfdsfsdhshgWasdfasdfdddaaa"; new Main().doString(input); } public void doString(String input) ...{ char[] chars = input.toCharArray(); ArrayList<String> lists = new ArrayList<String>(); TreeSet<String> set = new TreeSet<String>(); for (int i = 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); StringBuffer sb = new StringBuffer(); for (int i = 0; i < lists.size(); i++) ...{ sb.append(lists.get(i)); } input = sb.toString(); System.out.println(input); int max = 0; String maxString = ""; ArrayList<String> maxlist = new ArrayList<String>(); Iterator<String> its = set.iterator(); while (its.hasNext()) ...{ String os = its.next(); int begin = input.indexOf(os); int last = input.lastIndexOf(os); int value = last - begin + 1; if (value > max) ...{ max = value; maxString = os; maxlist.add(os); } else if (value == max) ...{ maxlist.add(os); } } int index = 0; for (int i = 0; i < maxlist.size(); i++) ...{ if (maxlist.get(i).equals(maxString)) ...{ index = i; break; } } System.out.print("The most occured character is "); for (int i = index; i < maxlist.size(); i++) ...{ System.out.print(maxlist.get(i) + " "); } System.out.println(); System.out.println("They occured " + max + " times"); }}
小结:
引入TreeSet:通过集合快速找到所有出现的字符,去除冗余;
引入ArrayList,使用快速排序,生成排序后的字符串;
如果频繁修改操作String,建议用StringBuffer类;
如果出现次数相同,则把相应的字符都记录到一个新的List里面;
使用泛型,可以大大降低出错的概率,减少类型转换可能带来的问题。