统计打印字符串arg中每个字符出现的次数

统计打印字符串arg中每个字符出现的次数,如果arg没有字符则打印“empty string"
如果arg不为空
1.打印arg中每个字符出现的次数
2.按出现次数统计每个出现次数的数字有哪些字符,如1-[务,疫,精],2-[的,优,化]...*3.将第2题的出现次数倒序排列

1.代码

方法一:

public class MyStringUtil {
    public static void main(String[] args) {
        countCharTimes("11月11日1,国务院联防联控机制综合组发布《关于进一步优化新冠肺炎疫情防控措施科学精准做好防控工作的通知》,公布进一步优化防控工作的二十条措施。一");
//        countCharTimes("");
    }
    /**
     * *统计打印字符串arg中每个字符出现的次数,如果arg没有字符则打印“empty string"
     * 如果arg不为空
     * *1.打印arg中每个字符出现的次数
     * *2.按出现次数统计每个出现次数的数字有哪些字符,如1-[务,疫,精],2-[的,优,化]...*3.将第2题的出现次数倒序排列
      */

    public static void countCharTimes(String arg){
        if ("".equals(arg) || arg==null || arg.trim().equals("")){
            System.out.println("empty string");
            return;
        }
        List<String> list=new ArrayList<String>(Arrays.asList(arg.split("")));
        List<String> strings = new ArrayList<String>();

        //统计字符串出现的次数
        for (int i = 0; i < list.size();) {
            int count=1;
            for (int j = 1; j < list.size(); j++) {
                if (list.get(i).equals(list.get(j)) || list.get(i) == list.get(j)){
                    count++;
                    list.remove(j);
                    j--;
                }
            }
            strings.add(count+":"+list.get(i));
            list.remove(i);
        }

        //统计出现相同次数的字符
        for (int i = 1; strings.size() > 0; i++) {
            String s = i+"=[";
            for (int j = 0; j < strings.size(); j++) {
                String[] split = strings.get(j).split(":");
                String string=split[0];
                if (Integer.parseInt(string) == i){
                    if (j == strings.size()-1){
                        s=s+split[1];
                    }else {
                        s=s+split[1]+",";
                    }

                    strings.remove(j);
                    j--;
                }
            }
            s=s+"]";
            list.add(s);
        }

        //打印出按出现次数统计每个出现次数的数字有哪些字符
        for (int i = list.size()-1; i >= 0; i--) {
            System.out.println(list.get(i));
        }
    }
}

方法二:

public class MyStringUtil {
    public static void main(String[] args) {
        countCharTimes("11月11日1,国务院联防联控机制综合组发布《关于进一步优化新冠肺炎疫情防控措施 科学精准做好防控工作的通知》,公布进一步优化防控工作的二十条措施。一");
    }
    /**
     * 统计打印字符串arg中每个字符出现的次数,如果arg没有字符则打印“empty string”
     * 如果arg不为空
     * 1. 打印arg中每个字符出现的次数
     * 2. 按出现次数统计每个出现次数的数字有哪些字符,如 1-[务, 疫, 精], 2-[的, 优, 化]...
     * 3. 将第2题的出现次数倒序排列
     * */
    public static void countCharTimes(String arg){
        if (arg == null || arg.isEmpty()){
            System.out.println("empty string");
        }else{
            Map<Character, Integer> map = new HashMap<>();
            for (int i = 0; i < arg.length(); i++){
                Integer n = map.get(arg.charAt(i));
                if (n == null) n = 0;
                n++;
                map.put(arg.charAt(i), n);
            }
            System.out.println(map);

            Map<Integer, List<Character>> map2 = new TreeMap<>();
            Iterator<Character> iter = map.keySet().iterator();

            while(iter.hasNext()){
                Character c = iter.next();
                Integer n = map.get(c);
                List<Character> list = map2.get(n);
                if (list == null) list = new ArrayList<>();
                list.add(c);
                map2.put(n, list);
            }
            System.out.println(map2);

            Set<Integer> sortSet = new TreeSet<Integer>(new Comparator<Integer>() {
                @Override
                public int compare(Integer o1, Integer o2) {
                    if (o2 == 4) return 1;
                    if (o2 > o1) return 1;
                    else return -1;
                }
            });
            sortSet.addAll(map2.keySet());
            Iterator<Integer> iter2 = sortSet.iterator();
            System.out.println();
            System.out.println("出现次数倒序打印:");
            while (iter2.hasNext()){
                Integer value = iter2.next();
                System.out.println(value + ": " + map2.get(value));
            }
        }
    }
}

2.实现步骤

1.统计字符出现的次数,count++,之后移除;

2.统计拥有相同次数的字符串;

3.倒序打印出每个出现次数的数字有哪些字符。

3.结果

4.遇到的错误

1.UnsupportedOperationException异常解析

出现错误的原因:不支持所请求的操作,ArrayList的add方法需要重写

错误代码

List<String> list=new ArrayList<String>();
list = Arrays.asList(arg.split(""));

 2.解决方法

  1. List<String> list = new ArrayList<>(Arrays.asList(strings));
  2. List<String> list = new ArrayList<>();
    list.addAll(Arrays.asList(strings));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值