使用ASCII表计算数组中的每个字母(Unicode代码)

时间:2014-12-24 01:06:39

标签: java arrays

我是Java的新手,我无法理解这种结构:

public static int[] upperCounter(String str) {
    final int NUMCHARS = 26;
    int[] upperCounts = new int[NUMCHARS];
    char c;

    for (int i = 0; i < str.length(); i++) {
        c = str.charAt(i);
        if (c >= 'A' && c <= 'Z')
            upperCounts[c-'A']++;
    }

    return upperCounts;
}

此方法有效,但list[c-'A']++;是什么意思?

4 个答案:

答案 0 :(得分:5)

c - 'A'正在使用['A' .. 'Z']范围内的字符,并减去'A'以创建[0 .. 25]范围内的数值,以便将其用作数组索引

upperCounts[c - 'A']++使用相应的索引c递增字符c - 'A'的出现次数。

实际上,循环正在生成一个字符类型计数数组。

答案 1 :(得分:3)

这意味着,您在++数组中的c - 'A'索引处增加(list)元素的值。

c是可变的 - 字母表中的字母数

'A'是指字母A(十进制65)的Unicode代码点。字母B是十六进制等。

答案 2 :(得分:3)

这是非常高级的语法,让我试着将其分解:

c - 'a'

c是循环中的索引变量,而'a'是具有某个整数值的字符,如ASCII表所示。此操作会生成整数结果。

list[c - 'a']

然后,此整数值用于连接int[]数组,获取list数组中的第n个项,返回整数结果。

list[c - 'a']++;

++运算符会为该值添加一个。

答案 3 :(得分:2)

char变量中的值可以表示为整数。字母A65a97(有关更多信件,请参阅ASCII table)。

list[c-'A']++;

此代码表示取c的值(介于6590之间[由于if ( c >= 'A' && c <= 'Z' )])并减少{{1}的值}(即A)。这将返回数组65中的索引并增加其当前值。

示例:c是list

C

因此,索引C = 67 A = 65 C - A = 2 将会更改。索引2第三个​​元素,如2是字母表中的第三个​​字母。