共计 1991 个字符,预计需要花费 5 分钟才能阅读完成。
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…
正文完