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”和“z”,该怎么办?您可以简单地将“a”和“z”更改为“0”和“9”,或者将它们作为变量传递。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)