乐趣区

Java-小模块之统计字符串中元素个数

Java 小模块之 – 统计字符串中元素个数

曾经看过我 Stream 或者 Guava 类库等文章的小伙伴应该很明白我这篇博文的意义所在了
一是给读者提供综合的博文入口 二是自己也总结一下思路
ps: 之前没看过小编文章的小伙伴也不要紧 可以先看下本文所介绍的几种处理方法 如果觉得还不错 可以点击文章末尾的链接跳转具体页面进行探讨

普通方式(Map)

Map<Character, Integer> map1=new TreeMap<>();
String str="112221324kassxsbx";
int count;
// 遍历字符串 用字符串指定下标的值做运算
for(int i=0;i<str.length();i++) {
    // 每次循环前初始化 count 的值
    count=1;
    // 判断 map 集合中是否存在 i 下标对应的字符串的值 不存在则将 count=1 存入
    if(!map1.containsKey(str.charAt(i))) {map1.put(str.charAt(i), count);}
    // 如果存在 则把 count+ 1 后存入
    else {count+=map1.get(str.charAt(i));
    map1.put(str.charAt(i), count);
    }
}
// 遍历 map 集合
map1.forEach((k,v)->log(k+"出现次数"+v));
//        1 出现次数 3
//        2 出现次数 4
//        3 出现次数 1
//        4 出现次数 1
//        a 出现次数 1
//        b 出现次数 1
//        k 出现次数 1
//        s 出现次数 3
//        x 出现次数 2 

jdk8 Stream 处理

String str="1233ADddsd";
/** 这里将字符串转换为字符数组再转换为集合 
利用了 Hutool 的万能转换器的技术 */
var treemap=new TreeMap<>(toList(convert(char[].class, str))
                    // 将集合转换为 Stream
                    .stream()
                    // 排序 Stream 中的元素
                    .sorted()
                    // 利用数据分组和分组后子集处理技术 
                    // 将数据按照 Stream 中每个元素本身进行分组 并将每组元素个数返回
                    .collect(Collectors.groupingBy(ic->ic,Collectors.counting())));
// 遍历集合
treemap.forEach((k,v)->log(k+"出现的次数"+v));
//        1 出现的次数 1
//        2 出现的次数 1
//        3 出现的次数 2
//        A 出现的次数 1
//        D 出现的次数 1
//        d 出现的次数 3
//        s 出现的次数 1 
  • 关于对 Stream 的介绍和使用 可以参考小编的文章:
    https://segmentfault.com/a/11…
是不是觉得这样已经简便了很多 但是不要急 我们有更好的

Guava 类库处理

String string="1234234qwew";
// 利用 Guava 中的新集合类型 Multiset 存储数据的特性
Multiset<Object> create = HashMultiset.create();
// 字符串转换为集合的技术 依旧利用 Hutool 中的万能转换器 实在是方便啊!!!
create.addAll(toList(convert(char[].class,string)));
// 结合 Stream 的查重和排序对集合中元素进行过滤
create.stream().distinct().sorted().forEach((ss)->log(ss+"出现和贺词"+create.count(ss)));
//        1 出现和贺词 1
//        2 出现和贺词 2
//        3 出现和贺词 2
//        4 出现和贺词 2
//        e 出现和贺词 1
//        q 出现和贺词 1
//        w 出现和贺词 2 
  • 依旧给各位奉上关于 Guava 的文章:
    https://segmentfault.com/a/11…
到这里代码就又简便高级许多吧 但是我们还有更好的

Hutool 类库处理

String string="1234234AqAw34qw";
/** 利用 IterUtil 下的 countMap :
        根据集合返回一个元素计数的 Map,所谓元素计数就是假如这个集合中某个元素出现了 n 次,那将这个元素做为 key,n 做为 value*/
Map<?, Integer> countMap =new TreeMap(countMap(toList(convert(char[].class,string))));
countMap.forEach((k,v)->log(k+"出现了几次:"+v));
//        1 出现了几次:1
//        2 出现了几次:2
//        3 出现了几次:3
//        4 出现了几次:3
//        A 出现了几次:2
//        q 出现了几次:2
//        w 出现了几次:2
最后这一行代码的解决方式大家可否喜欢呐!!!
  • 关于 Hutool 工具的解析 大家慢慢等待小编整理即可 到时候自然更新网址
  • 在此先奉上 API 官方解析:https://www.bookstack.cn/read…
退出移动版