Character.getNumericvalue 字符频率 table

Character.getNumericvalue in char Frequency table

int[] buildCharFreqTable(string phrase){
    int[] tab = new int[Character.getNumericValue('z') - Character.getNumericValue('a') + 1];
    for (char c : phrase.toCharArray()) {
        int x = getCharNumber(c);
        if ( x != -1){
            tab[x]++;
        }
    }
    return tab;
}

这是一个计算每个字符在短语中出现多少次的函数。但是我不明白

这行
int[] tab = new int[Character.getNumericValue('z') - Character.getNumericValue('a') + 1];

这条线是做什么的,为什么我们必须使用

Character.getNumericValue('z') - Character.getNumericValue('a') + 1

提前致谢

此行试图创建一个数组,其中每个字符 'a' 到 'z' 都有一个索引。 Java 与 java 用于其他字符的 unicode 不同,它实际上使用相同的数字对英文字母的所有变体进行编码。 'A'和'a'都对应10,'B'和'b'都对应11,依此类推。这意味着要独立于大小写计算英文字母表中的每个字符,我们可以创建一个数组,每个字符有一个索引,并增加与我们看到的每个字符对应的索引值。该行

int[] tab = new int[Character.getNumericValue('z') - Character.getNumericValue('a') + 1];

创建大小为 Value of 'z' - Value of 'a' + 1 的新数组。在java中,英文字符是按字母顺序给出的数值,所以'a'是10,'z'是35。这使得我们数组的大小35-10+1或26,数字英文字母表中的字母。这只是创建该数组的一种比简单地创建大小为 26 的数组更具适应性的方法。如果您想在一行中计算字符“0”到“9”而不是 'a' 和 [=18,该怎么办? =]?您可以简单地将 'a' 和 'z' 更改为“0”和“9”,或者将它们作为变量传递。