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"); 
    } 
posted @ 2017-04-26 18:02  zhchoutai  阅读(651)  评论(0编辑  收藏  举报