回覆列表
  • 1 # 程式設計師米兜

    陣列的索引法使用流(使用TreeMap)巧用split巧用Pattern一、實現程式碼

    import java.util.*;import java.util.function.Function;import java.util.regex.Matcher;import java.util.regex.Pattern;import java.util.stream.Collectors;/** * @author 米兜 * @description * @date 2020/6/26 22:23 * @modified by */public class Sum {public static void main(String[] args) {String str = "guanzhuchengxuyuanmidou";System.out.println("-----------1.陣列的索引法【start】-----------");count1(str);System.out.println("-----------1.陣列的索引法【end】-----------");System.out.println("---------------------------------------------");System.out.println("-----------2.使用流(使用TreeMap)【start】-----------");count2(str);System.out.println("-----------2.使用流(使用TreeMap)【end】-----------");System.out.println("---------------------------------------------");System.out.println("-----------3.巧用split【start】-----------");count3(str);System.out.println("-----------3.巧用split【end】-----------");System.out.println("---------------------------------------------");System.out.println("-----------4.巧用Pattern【start】-----------");count4(str);System.out.println("-----------4.巧用Pattern【end】-----------");}/** * @author 米兜 * @param * @description 1.陣列的索引法 * @date 2020/6/26 22:51 */ public static void count1(String str) {//建立26個空間大小的陣列,存放26個字母 int[] nums = new int[26];for (char i : str.toCharArray()) {//自動將char i轉化成ascall碼 if (i >= 97 && i <= 122) {//利用陣列的索引進行儲存 nums[i - 97]++;}}for (int i = 0; i < nums.length; i++) {if (nums[i] != 0) {//i加上97並且再轉化為char型別就可以顯示相應的字元 char j = (char) (i + 97);System.out.println("字元:" + j + "====" + "個數" + nums[i]);}}}/** * @author 米兜 * @param * @description 2.使用流(使用TreeMap/這裡也是用map) * @date 2020/6/26 22:51 */ public static void count2(String str) {TreeMap<String, Long> result = Arrays.stream(str.split("")).sorted()// .collect(Collectors.groupingBy(Function.identity(),Collectors.counting())); .collect(Collectors.groupingBy(Function.identity(),TreeMap::new,Collectors.counting()));Iterator iter = result.entrySet().iterator();while(iter.hasNext()) {Map.Entry entry = (Map.Entry)iter.next();System.out.println("字元:" + (String)entry.getKey() + "====" + "個數" +(Long)entry.getValue());}}/** * @author 米兜 * @param * @description 3.巧用split * @date 2020/6/26 22:51 */ public static void count3(String str) {ArrayList<String> arrayList = new ArrayList <>();for (char c : str.toCharArray()) {int count=str.split(String.valueOf(c)).length - 1;//最後一個字串split要+1 if (str.substring(str.length()-1,str.length()).equals(String.valueOf(c))){count++;}if (arrayList.contains(String.valueOf(c))){continue;}System.out.println("字元:" + String.valueOf(c) + "====" + "個數" +count);arrayList.add(String.valueOf(c));}}/** * @author 米兜 * @param * @description 4.巧用Matcher * @date 2020/6/26 22:51 */ //如果要不區分大小寫,則compile(minstr,CASE_INSENSITIVE) public static void count4(String str) {ArrayList<String> arrayList = new ArrayList<>();for (char c : str.toCharArray()) {int count = 0;Matcher m = Pattern.compile(String.valueOf(c)).matcher(str);if (arrayList.contains(String.valueOf(c))) {continue;}while (m.find()) {count++;}System.out.println("字元:" + String.valueOf(c) + "====" + "個數" + count);arrayList.add(String.valueOf(c));}}}

    二、執行結果

    -----------1.陣列的索引法【start】-----------

    字元:a====個數2

    字元:c====個數1

    字元:d====個數1

    字元:e====個數1

    字元:g====個數2

    字元:h====個數2

    字元:i====個數1

    字元:m====個數1

    字元:n====個數3

    字元:o====個數1

    字元:u====個數5

    字元:x====個數1

    字元:y====個數1

    字元:z====個數1

    -----------1.陣列的索引法【end】-----------

    ---------------------------------------------

    -----------2.使用流(使用TreeMap)【start】-----------

    字元:a====個數2

    字元:c====個數1

    字元:d====個數1

    字元:e====個數1

    字元:g====個數2

    字元:h====個數2

    字元:i====個數1

    字元:m====個數1

    字元:n====個數3

    字元:o====個數1

    字元:u====個數5

    字元:x====個數1

    字元:y====個數1

    字元:z====個數1

    -----------2.使用流(使用TreeMap)【end】-----------

    ---------------------------------------------

    -----------3.巧用split【start】-----------

    字元:g====個數2

    字元:u====個數5

    字元:a====個數2

    字元:n====個數3

    字元:z====個數1

    字元:h====個數2

    字元:c====個數1

    字元:e====個數1

    字元:x====個數1

    字元:y====個數1

    字元:m====個數1

    字元:i====個數1

    字元:d====個數1

    字元:o====個數1

    -----------3.巧用split【end】-----------

    ---------------------------------------------

    -----------4.巧用Pattern【start】-----------

    字元:g====個數2

    字元:u====個數5

    字元:a====個數2

    字元:n====個數3

    字元:z====個數1

    字元:h====個數2

    字元:c====個數1

    字元:e====個數1

    字元:x====個數1

    字元:y====個數1

    Disconnected from the target VM, address: "127.0.0.1:53939", transport: "socket"

    字元:m====個數1

    字元:i====個數1

    字元:d====個數1

    字元:o====個數1

    -----------4.巧用Pattern【end】-----------

    Process finished with exit code 0

    三、總結

    冰凍三尺非一日之寒,滴水石穿非一日之功。

  • 2 # 零一研究院

    hashmap只是儲存kv型別資料的一種方式,如果目標資料的範圍有限,也可以使用陣列的方式儲存。例如,假設字串中字母的範圍為a-z,那門,完全可以初始化一個長度為26的int陣列,陣列第一個元素表示a的數量,第二個元素表示b的數量,依次類推。總之,字母的範圍必定是有限的。

  • 3 # 陳風起

    1.研究一下hashmap使用的資料結構,自己寫一個

    2.明確字串的字符集,使用足夠大的陣列直接表示字符集,遍歷字串,以字元值作為陣列下表進行定址,陣列元素值加1。

    3.取第一個字元,遍歷字串,找出相同的字元並累加次數後,置為無效值,遍歷結束時得到本字元出現的次數。找出第二個有效字元,重複

    知道類的用法和其大致實現就好了,沒必要再造個輪子,當然學習階段為了加深印象就另說了

  • 4 # 擺動小火車

    有輪子不讓使那就自己造輪子!簡單的看題主要求,僅僅是查詢字串中每個字元出現的個數。第一步是找出不同的字元,第二個是遍歷字串,找出每個不同字元的個數,累加求和返回。

  • 5 # java攻城獅

    這個簡單,吧字串轉成陣列,然後for迴圈透過if判斷把字元過濾出來放到一個list然後獲取這個list的size()就搞定了

  • 中秋節和大豐收的關聯?
  • 人在無聊的時候如何度過?