java - Character.getNumericvalue in char Frequency 表

标签 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

提前致谢

最佳答案

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

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

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

关于java - Character.getNumericvalue in char Frequency 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44711311/

相关文章:

java - 具有不同行号的Android GridView

java - 如何在java中发送Json对象

c++ - 是否有一种数据结构不允许重复并且还保持输入顺序?

regex - 在 Powershell Regeg -match 之后从 $matches 哈希表中提取数据

c++ - 构造函数不更新类成员变量

c - 哈希表单词在 C 中被覆盖

java - 实现基于 REST 的身份验证

java - 我需要了解 java 示例中枚举的行为?

java - 红黑树需要两次遍历

c - 链表删除位置 N 的节点