++ array [s.charAt(i) - 'A']究竟做了什么?

Ren*_*nuz 2 java arrays string char

for (int i = 0; i < s.length(); ++i) 
    {
        if (s.charAt(i) >= 'A' && s.charAt(i) <= 'Z') 
        {
            ++array[s.charAt(i) - 'A'];
        }
    }
Run Code Online (Sandbox Code Playgroud)

我理解For循环.s.length()是26,确切地说是int [26].所以这个循环将发生26次,0-25.如果i,0-25处的Char在或者是AZ之间它将继续进行++array[s.charAt(i) - 'A'];从我看到它每个循环添加一次数组,或者每个循环添加一次数组的值,对于char i的String,所以第一个将是0秒将是2,因为数组从0开始.因此在位置添加数组i -'A'是我感到困惑的地方.

Mys*_*ial 11

该语句++array[s.charAt(i) - 'A'];正在递增索引的数组中的值s.charAt(i) - 'A'.

这个循环的作用是它计算每个字母的出现次数s.

原因- 'A'是,它"转移"ascii/unicode值,使其A - Z值为0 - 25.因此更适合作为数组索引.


Luk*_*der 9

array似乎是"每个大写字母的反击".通过从字符串'A'中的任意字符减去字符,您可以在数组中获得字母的索引:

'A' - 'A' == 0
'B' - 'A' == 1
'C' - 'A' == 2
Run Code Online (Sandbox Code Playgroud)

要理解这一点,您应该理解,Java char与(unsigned)一样对待short.因此,您可以使用char