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

    技术2022-05-11  54

    一个字符串中可能包含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里面; 使用泛型,可以大大降低出错的概率,减少类型转换可能带来的问题。

    最新回复(0)