【Java学习】统计字符串中字符重复出现的个数Map(K,V) (19)

案例:
统计字符串aasdsaaadccdc中的重复字符的个数
打印格式:
a(5)
c(3)
d(3)
s(2)


方法1

思路:根据set集合的去重复性,先拿到其中的键
根据键与字符串中的字符一一比较,个数++;

package com.westos.morning;

import java.util.*;

/**
 * @Author: Administrator
 * @CreateTime: 2019-01-13 10:56
 */
public class 统计字符出现的个数 {
    public static void main(String[] args) {
        String s = "aasdsaaadccdc";
        String[] split = s.split("");
        //数组转集合,可以去除其中的重复元素,拿到键值
        HashSet<String> hashSet = new HashSet<String>(Arrays.asList(split));
        TreeMap<String, Integer> hashMap = new TreeMap<>();
        for (String s1 : hashSet) {
            int num=0;
            for (int i = 0; i < split.length; i++) {
                if(s1.equals(split[i])){
                    num++;
                }
            }
            hashMap.put(s1,num);
        }
        Set<Map.Entry<String, Integer>> entries = hashMap.entrySet();
        for (Map.Entry<String, Integer> entry : entries) {
            System.out.println(entry.getKey()+"("+entry.getValue()+")\t");
        }
    }
}



方法2–巧妙的方法

先对排序字符,然后后,遍历从后找和从前找,索引相减+1,

package com.westos.morning;

import java.util.Arrays;

/**
 * @Author: Administrator
 * @CreateTime: 2019-01-13 11:51
 */
public class 统计字符出现的个数2 {
    public static void main(String[] args) {
        String str = "aasdsaaadccdc";
        char[] chars = str.toCharArray();
        Arrays.sort(chars);
        String s = String.valueOf(chars);
        for (int i = 0; i < chars.length;) {
            System.out.println(chars[i]+"("+(s.lastIndexOf(chars[i])-s.indexOf(chars[i])+1)+")");
            i+= (s.lastIndexOf(chars[i]) - s.indexOf(chars[i]) + 1);
        }


    }
}


方法3

两层遍历,外层当作键,内层当作值,找个数++;

package com.westos.morning;

import java.util.HashMap;

/**
 * @Author: Administrator
 * @CreateTime: 2019-01-13 12:40
 */
public class 统计字符出现的个数3 {
    public static void main(String[] args) {
        String str = "aasdsaaadccdc";
        HashMap<Character, Integer> hashMap = new HashMap<>();
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            int num = 0;
            for (int j = 0; j < str.length(); j++) {
                char c1 = str.charAt(j);
                if(c==c1){
                    num++;
                }
            }
            hashMap.put(c,num);
        }
        System.out.println(hashMap);
    }
}


方法4

循环,追个拿到字符,判断集合中有无,
无则添加进去,个数置1.
有的话,根据键去除值,值加1,然后添加覆盖旧值.

package com.westos.morning;

import java.util.HashMap;

/**
 * @Author: Administrator
 * @CreateTime: 2019-01-13 13:21
 */
public class 统计字符串出现的个数4 {
    public static void main(String[] args) {
        String str = "aasdsaaadccdc";
        HashMap<Character, Integer> hashMap = new HashMap<>();
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if(!hashMap.containsKey(c)){
                hashMap.put(c,1);
            }else {
                Integer integer = hashMap.get(c);
                integer++;
                hashMap.put(c,integer);
            }
        }
        System.out.println(hashMap);



    }
}


结果

a(5)	
c(3)	
d(3)	
s(2)	

Process finished with exit code 0


谢谢!

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值