数组Java:用字符减去字符意味着什么?
最近在参加一个项目时,我遇到了一个问题。 下面是节目的一部分
public static int numberNeeded(String first, String second) {
int[] lettercounts = new int[26];
for(char c : first.toCharArray()){
lettercounts[c-'a']++;
}
我不明白这行代码的作用:
lettercounts[c-'a']++;
我猜它是增加特定字符的lettercounts数组中的值(最初为0);我猜“a”的索引是0,“z”是25。但我想了解这段代码是如何工作的
# 1 楼答案
Java中的
char
变量是数值。因此,从c
的值中减去'a'
将给出它与字母表开头的偏移量。这允许您使用此值作为数组索引,正如您正确猜测的那样# 2 楼答案
目标是统计每个角色的出现次数
是一种获取字符在字母表中位置的聪明方法
'a' - 'a'
将给您0'b' - 'a'
会给你1'c' - 'a'
会给你2,以此类推该值用作数组的索引(正如您正确说明的那样,数组以零初始化),并且计数递增
值得注意的是,如果字符串中存在除} ,则此操作将中断
a-z
以外的任何字符(包括大写字符),并且您将看到^{# 3 楼答案
这基本上只是将字符('a'在您的示例中)转换为它所代表的字母表中的字母数字a'实际上有一个ASCII(技术上是utf-16,其前255个值是ASCII值)数值(97)。所有其他角色也是如此。因此,如果字符是“b”,那么将访问数组的第二个元素(在位置1,98-97=1)。如果字符为“z”,则数组的第26个元素将被acessed(在位置25)。通过在搜索引擎中键入“ASCII表”,您可以轻松找到ASCII值表
同:
注意:不能在小写和大写字母之间执行此操作,因为它们具有完全不同的ASCII值(“A”,例如是65,而“A”是97)