Java:用字符减去字符意味着什么?

Java:用字符减去字符意味着什么?,java,arrays,Java,Arrays,最近在参加一个项目时,我遇到了一个问题。 下面是节目的一部分 public static int numberNeeded(String first, String second) { int[] lettercounts = new int[26]; for(char c : first.toCharArray()){ lettercounts[c-'a']++; } 我不明白这行代码的作用: lettercounts[

最近在参加一个项目时,我遇到了一个问题。 下面是节目的一部分

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。但我想了解这段代码是如何工作的。

这基本上只是将字符('a'在您的示例中)转换为它所代表的字母表中的字母数字a'实际上有一个ASCII(技术上是utf-16,其前255个值是ASCII值)数值(97)。所有其他角色也是如此。因此,如果字符是“b”,那么将访问数组的第二个元素(在位置1,98-97=1)。如果字符为“z”,则数组的第26个元素将被acessed(在位置25)。通过在搜索引擎中键入“ASCII表”,您可以轻松找到ASCII值表

int a = 'b' - 'a';
同:

int b = 98 - 97;

注意:不能在小写字母和大写字母之间执行此操作,因为它们具有完全不同的ASCII值(“A”,例如是65,而“A”是97)。

char
Java中的变量是数值。因此,从
c
的值中减去
'a'
,将给出其与字母表开头的偏移量。这允许您使用此值作为数组索引,正如您正确猜测的那样。

目标是统计每个字符的出现次数

c - 'a'
是一种获取字符在字母表中位置的聪明方法<代码>'a'-'a'将为您提供0<代码>'b'-'a'将为您提供1<代码>'c'-'a'会给你2,依此类推

该值用作数组的索引(正如您正确说明的那样,数组以零初始化),并且计数递增



值得注意的是,如果字符串中存在
a-z
以外的任何字符(包括大写字符),并且您会看到一个

您有eclipse吗?您是否尝试过设置断点并逐步完成代码。这就是我的方法,我保证如果你这样做的话,你会得到你的答案。我相信“c-'a'”会将两个字符转换成ASCII值,因此它与替换两个数字一样,正如你所描述的那样。如果向代码中输入字母在“a”…“z”之外的单词,则代码将中断,因为数组中没有这些单词的索引。“a”字符的值是一个8位无符号整数,从数学上讲是的,我尝试使用断点,我猜它是如何递增值的。谢谢你的回复,谢谢。现在我明白了。不用担心,我的字符串值只包含小写字符。显然,其他字母表会有所不同。Unicode与ASCII(128个代码点)共享U+0000到U+007F,与ISO 8859-1共享U+0000到U+00FF(256个代码点)。所有这些都无关紧要。块中的字母分为两个序列A-Z和A-Z,因此字符算术有点意义。是的,UTF-16将这些代码点编码为一个代码单元(Java
char
)。