1. 程式人生 > 實用技巧 >Java使用陣列、二維陣列、HashMap統計字串中每個字元出現的次數

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