char频率表中的Character.getNumericvalue

时间:2017-06-23 00:34:40

标签: java data-structures hashtable

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

提前致谢

1 个答案:

答案 0 :(得分:2)

这一行试图创建一个数组,其中每个字符'a'到'z'都有一个索引。与java用于其他字符的unicode不同,Java实际上使用相同的数字编码所有英文字母变体。 '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'和'z'?您可以简单地将'a'和'z'更改为'0'和'9',或将它们作为变量传递。