java如何在字符串中获取不同的字符及其数量

java如何在字符串中获取不同的字符及其数量

小编给大家分享一下java如何在字符串中获取不同的字符及其数量,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

如何在字符串中获取不同的字符及其数量

java如何在字符串中获取不同的字符及其数量

这道题可以拆解为两个步骤,第一步,找出不同的字符,第二步,统计出它们的数量。好像有点废话,是不是?那我先来一个答案吧。

publicclassDistinctCharsCount{publicstaticvoidmain(String[]args){printDistinctCharsWithCount("itwanger");printDistinctCharsWithCount("chenmowanger");}privatestaticvoidprintDistinctCharsWithCount(Stringinput){Map<Character,Integer>charsWithCountMap=newLinkedHashMap<>();for(charc:input.toCharArray()){IntegeroldValue=charsWithCountMap.get(c);intnewValue=(oldValue==null)?1:Integer.sum(oldValue,1);charsWithCountMap.put(c,newValue);}System.out.println(charsWithCountMap);}}

程序输出的结果是:

{i=1,t=1,w=1,a=1,n=1,g=1,e=1,r=1}{c=1,h=1,e=2,n=2,m=1,o=1,w=1,a=1,g=1,r=1}

说一下我的思路:

1)声明一个 LinkedHashMap,也可以用 HashMap,不过前者可以保持字符串拆分后的顺序,结果看起来更一目了然。

为什么要用 Map 呢?因为 Map 的 key 是不允许重复的,刚好可以对重复的字符进行数量的累加。

2)把字符串拆分成字符,进行遍历。

3)如果 key 为 null 的话,就表明它的数量要 +1;否则的话,就在之前的值上 +1,然后重新 put 到 Map 中,这样就覆盖了之前的字符数量。

思路很清晰,对不对?忍不住给自己鼓个掌。

那,JDK 8 之后,Map 新增了一个很厉害的方法 merge(),一次性为多个键赋值:

privatestaticvoidprintDistinctCharsWithCountMerge(Stringinput){Map<Character,Integer>charsWithCountMap=newLinkedHashMap<>();for(charc:input.toCharArray()){charsWithCountMap.merge(c,1,Integer::sum);}System.out.println(charsWithCountMap);}

有没有很厉害?一行代码就搞定。第一个参数为键,第二个参数为值,第三个参数是一个 BiFunction,意思是,如果键已经存在了,就重新根据 BiFunction 计算新的值。

如果字符是第一次出现,就赋值为 1;否则,就把之前的值 sum 1。

看完了这篇文章,相信你对“java如何在字符串中获取不同的字符及其数量”有了一定的了解,如果想了解更多相关知识,欢迎关注恰卡编程网行业资讯频道,感谢各位的阅读!

发布于 2022-03-17 21:19:05
收藏
分享
海报
0 条评论
26
上一篇:java如何反转字符串 下一篇:IDEA Debug如何实现求值计算
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码