您好,登錄后才能下訂單哦!
小編給大家分享一下java如何在字符串中獲取不同的字符及其數(shù)量,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
如何在字符串中獲取不同的字符及其數(shù)量
這道題可以拆解為兩個步驟,第一步,找出不同的字符,第二步,統(tǒng)計出它們的數(shù)量。好像有點廢話,是不是?那我先來一個答案吧。
public class DistinctCharsCount { public static void main(String[] args) { printDistinctCharsWithCount("itwanger"); printDistinctCharsWithCount("chenmowanger"); } private static void printDistinctCharsWithCount(String input) { Map<Character, Integer> charsWithCountMap = new LinkedHashMap<>(); for (char c : input.toCharArray()) { Integer oldValue = charsWithCountMap.get(c); int newValue = (oldValue == null) ? 1 : Integer.sum(oldValue, 1); charsWithCountMap.put(c, newValue); } System.out.println(charsWithCountMap); } }
程序輸出的結(jié)果是:
{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,不過前者可以保持字符串拆分后的順序,結(jié)果看起來更一目了然。
為什么要用 Map 呢?因為 Map 的 key 是不允許重復(fù)的,剛好可以對重復(fù)的字符進行數(shù)量的累加。
2)把字符串拆分成字符,進行遍歷。
3)如果 key 為 null 的話,就表明它的數(shù)量要 +1;否則的話,就在之前的值上 +1,然后重新 put 到 Map 中,這樣就覆蓋了之前的字符數(shù)量。
思路很清晰,對不對?忍不住給自己鼓個掌。
那,JDK 8 之后,Map 新增了一個很厲害的方法 merge(),一次性為多個鍵賦值:
private static void printDistinctCharsWithCountMerge(String input) { Map<Character, Integer> charsWithCountMap = new LinkedHashMap<>(); for (char c : input.toCharArray()) { charsWithCountMap.merge(c, 1, Integer::sum); } System.out.println(charsWithCountMap); }
有沒有很厲害?一行代碼就搞定。第一個參數(shù)為鍵,第二個參數(shù)為值,第三個參數(shù)是一個 BiFunction,意思是,如果鍵已經(jīng)存在了,就重新根據(jù) BiFunction 計算新的值。
如果字符是第一次出現(xiàn),就賦值為 1;否則,就把之前的值 sum 1。
看完了這篇文章,相信你對“java如何在字符串中獲取不同的字符及其數(shù)量”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。