簡體   English   中英

計算字符串中每個字符出現的次數並將其放入數組中

[英]Count the occurrence of each character in a string and put it in an array

因此,我正在計算我之前掃描的 Java 文件中字符串中每個字母的出現次數。 我從字符串中刪除了所有不必要的字符,現在字符串只包含 unicode 字母。 一個例子:

String letters = "wecanendupclimbingthewrongladderandpursuesomeoneelsesversionofsuccess";

所以假設我創建了一個數組來包含每個字母的頻率。

int[] frequency = new int[26];

我根據字母表中的字母將事件按順序排列。 所以假設a是5,b是3,c是10。應該是這樣的:

frequency = {5, 3, 10};

你認為我能做到什么程度最好?

通過(ch - 'a')計算與frequency數組相關的字符索引

從字符中減去字符'a'

        String letters = "aaaabbabbz";
        letters = letters.toLowerCase();
        int[] frequency = new int[26];
        for (char ch : letters.toCharArray()) {
            int index = ch - 'a';
            frequency[index]++;
        }
        System.out.println(Arrays.toString(frequency));

        // in case you want only the characters that appear you can use IntStream and filter
        int[] result = IntStream.of(frequency).filter(i -> i > 0).toArray();
        System.out.println(Arrays.toString(result));

, output

[5, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
[5, 4, 1]

好的解決方案是使用TreeMap以保持字符按字母順序排序,然后在遍歷字符后獲取相應的值列表(出現次數)。

這是一個例子:

String str = "wecanendupclimbingthewrongladderandpursuesomeoneelsesversionofsuccess";
Map<Character,Integer> map = new TreeMap<>();
for(char c : str.toCharArray())
    map.put(c, map.getOrDefault(c, 0)+1);
System.out.println(map.values());

Output:

[3, 1, 4, 4, 11, 1, 2, 1, 3, 3, 2, 7, 5, 2, 4, 8, 1, 4, 1, 2]

如果要包含不存在的字符(字符串中出現零次的字符),可以首先使用所有字母初始化 map,如下所示:

for(int i = 0; i < 26; i++)
    map.put((char)(97 + i), 0);

然后,output 將是:

[3, 1, 4, 4, 11, 1, 2, 1, 3, 0, 0, 3, 2, 7, 5, 2, 0, 4, 8, 1, 4, 1, 2, 0, 0, 0]

給這只貓剝皮的方法有很多,我認為最簡單的方法可能是根據字符 ASCII 值進行排序。 例如,'a' 的值是 97,所以無論你遇到什么字母,只需將其轉換並減去 97 以將其放入數組中的適當位置(假設你想要 arr[0] = 'a' 的頻率,arr[1 ] = 'b' 的頻率等)。 因此,如果您出現字母“字母”,只需在索引 int(letter) - 97 處增加數組值,如果這有意義的話。 同樣,有很多方法可以解決這個問題,你的思考過程也很好。

或者如評論中所述,您可以只使用鍵/值 map 哈哈

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM