Java使用數組、二維數組、HashMap統計字符串中每個字符出現的次數


要求:給定一個字符串,統計每個字符出現次數

第一種思路,利用HashMap的特性,key不能重復,用來儲存出現字符,value可以刷新,用來儲存字符出現字數

 1 public static void main(String[] args) {
 2         //字符串中各字母個數
 3         String s = "safhuiwganlndvlznilenflawenvlav";
 4         Map<Character, Integer> map = new HashMap<>();
 5         char[] c = s.toCharArray();//將字符串轉化為字符數組
 6         for (int i = 0; i < c.length; i++) {
 7             int count = 1;//初始計數為1
 8             if (map.containsKey(c[i])) {//判斷map中是否含該字符
 9                 count += map.get(c[i]);//原計數+1
10                 map.put(c[i], count);
11             } else {//不含該字符直接存入,計數為1
12                 map.put(c[i], count);
13             }
14         }
15         System.out.println("字符串中各字符個數:");
16         System.out.println(map);
17     }
字符串中各字符個數:
{a=4, d=1, e=2, f=2, g=1, h=1, i=2, l=5, n=5, s=1, u=1, v=3, w=2, z=1}

 

第二種思路,使用s.length*2的int二維數組,每一行儲存字符的碼值和出現次數,注意字符0的存儲

public static void main(String[] args) {
        String s = "safhuiwganlndvlznilenflawenvlav0765054162011";
        char[] c = s.toCharArray();
        int[][] a = new int[s.length()][2];
        for (int i = 0; i < c.length; i++) {
            for (int j = 0; j < a.length; j++) {
                int count = 1;
                if (c[i] == a[j][0] && a[j][1] > 0) {//如果數組已經包含該字符
                    a[j][1] += count;//計數+1
                    break;
                } else if (a[j][0] == 0 && a[j][1] == 0) {//如果該字符沒出現過,遍歷到空位置置入字符
                    a[j][0] = c[i];
                    a[j][1] = count;
                    break;
                }
            }
        }
        System.out.println("字符串中各字符個數:");
        for (int i = 0; i < a.length; i++) {
            if (a[i][1] > 0) {
                System.out.println((char) a[i][0] + ":" + a[i][1]);
            }
        }
    }
字符串中各字母個數:
s:1
a:4
f:2
h:1
u:1
i:2
w:2
g:1
n:5
l:5
d:1
v:3
z:1
e:2
0:3
7:1
6:2
5:2
4:1
1:3
2:1

 

第三種思路,通過字符特性,每個字符都有一個unicode碼值,建立65535長度的一維數組,數組下標既為字符儲存位置,數組內容存儲出現次數

@Test
    public void work() {
        String string = "alksdflaksjdflkasjfd2398407239874238974238974我是漢字我是漢字我是漢字我是漢字我是漢字我是漢字我是漢字我是漢字我是漢字我是漢字我是漢字328╮(╯_╰)╭23回去時間3lkjalksjdflkajsdf";
        int[] arr = new int[65535];// 大數組, 即使所有字符出現也不怕沖突
        for (int i = 0; i < string.length(); i++) {
            char ch = string.charAt(i);
            arr[ch]++; // 用字符碼值直接作為下標, 修改它對應的次數
        }
        System.out.println("字符串中各字符個數:");
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > 0) {
                System.out.println((char)i + " : " + arr[i]);
            }
        }
    }
字符串中各字符個數:
( : 1
) : 1
0 : 1
2 : 6
3 : 7
4 : 4
7 : 4
8 : 5
9 : 4
_ : 1
a : 5
d : 5
f : 5
j : 5
k : 6
l : 6
s : 5
╭ : 1
╮ : 1
╯ : 1
╰ : 1
去 : 1
回 : 1
字 : 11
我 : 11
時 : 1
是 : 11
漢 : 11
間 : 1

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM