java实现字符串统计,如果统计的个数相同,则按照ASCII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计

    技术2022-07-10  155

    如果统计的个数相同,则按照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; } }
    Processed: 0.013, SQL: 9