java實現字符串統計,如果統計的個數相同,則按照ASCII碼由小到大排序輸出 。如果有其他字符,則對這些字符不用進行統計

如果統計的個數相同,則按照ASCII碼由小到大排序輸出 。如果有其他字符,則對這些字符不用進行統計。


實現以下接口:
輸入一個字符串,對字符中的各個英文字符,數字,空格進行統計(可反覆調用)
按照統計個數由多到少輸出統計結果,如果統計的個數相同,則按照ASII碼由小到大排序輸出
清空目前的統計結果,重新統計
調用者會保證:
輸入的字符串以‘\0’結尾。


輸入描述

aadddccddc

輸出

dca


算法實現

public class App {
	public static void main(String[] args) {
        String str = "aa ddd ccd  dc";
        // ascii, count
        Map<Integer, Integer> map = new HashMap<>();
        // ascii, ch
        Map<Integer, Character> asMap = new HashMap<>();

        int assicValue, countVal;
        // 對字符串進行字符個數統計
        for (char ch : str.toCharArray()) {
            // 只處理英文字符,數字,空格進行統計
            if (ch >= 'a' || ch <= 'z'
                    || ch >= 'A' || ch <= 'Z'
                    || ch >= '0' || ch <= '9'
                    || ch == ' ') {
                // 獲取當前字符對應的ascci碼
                assicValue = Integer.valueOf(ch);
                countVal = 0;
                if (map.containsKey(assicValue)) {
                    countVal = map.get(assicValue);
                }
                map.put(assicValue, ++countVal);
                asMap.put(assicValue, ch);
            }
        }

        List<Pairs> list = new ArrayList<>();
        map.forEach((k, v)-> {
            list.add(new Pairs(k, v));
        });

        // 優先根據字符出現的個數進行降序排序
        list.sort((p1, p2) -> {
            // 如果個數相同, 則按照ascii碼進行升序排序
            if (p1.getValue() - p2.getValue() == 0) {
                // 升序
                return p1.getKey() - p2.getKey();
            }
            // 降序
            return p2.getValue() - p1.getValue();
        });

        // 輸出結果
        StringBuilder rlt = new StringBuilder();
        for (Pairs pairs : list) {
            Integer k = pairs.getKey();
            rlt.append(asMap.get(k));
        }

        System.out.println(rlt.toString());
    }

    @Data
    @AllArgsConstructor
    public static class Pairs {
        private Integer key;
        private Integer value;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章