首頁 >Java >java教程 >java如何在字串中取得不同的字元及其數量

java如何在字串中取得不同的字元及其數量

王林
王林轉載
2023-04-20 12:04:061893瀏覽

如何在字串中取得不同的字元及其數量

這題可以拆解為兩個步驟,第一步,找出不同的字符,第二步,統計出它們的數量。好像有點廢話,是不是?那我先來一個答案吧。

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);     } }

程式輸出的結果是:

{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(),一次為多個鍵賦值:

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); }

有沒有很厲害?一行程式碼就搞定。第一個參數為鍵,第二個參數為值,第三個參數是一個 BiFunction,意思是,如果鍵已經存在了,就重新根據  BiFunction 計算新的值。

如果字元是第一次出現,就賦值為 1;否則,就把之前的值 sum 1。

以上是java如何在字串中取得不同的字元及其數量的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除