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

时间:2011-11-14 08:06:00

标签: 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'];
        }
    }

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

6 个答案:

答案 0 :(得分:10)

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

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

- 'A'的原因是它“移动”了ascii / unicode值,因此A - Z的值为0 - 25.因此更适合作为数组索引。

答案 1 :(得分:9)

array似乎是“每个大写字母的反击”。通过从字符串中的任意字符中减去字符'A',您将获得数组中字母的索引:

'A' - 'A' == 0
'B' - 'A' == 1
'C' - 'A' == 2

要理解这一点,您应该理解,Java将char视为与(unsigned)short相同。因此,您可以使用char

进行计算

答案 2 :(得分:1)

计算字符

(伯爵不是历史人物)

答案 3 :(得分:0)

public class ArrayCharOccurence {
    static final int ASCII = 256;

    static char getMaxOccuringChar(String str) {

        int count[] = new int[ASCII];

        int len = str.length();
        for (int i = 0; i < len; i++)
            count[str.charAt(i)]++;

        int max = -1;
        char result = ' ';

        for (int i = 0; i < len; i++) {
            if (max < count[str.charAt(i)]) {
                max = count[str.charAt(i)];
                result = str.charAt(i);
            }
        }

        return result;
    }

    // Driver Method
    public static void main(String[] args) {
        String str = "sample string";
        System.out.println("Max occurring character is "
                + getMaxOccuringChar(str));
    }
}

答案 4 :(得分:0)

++array[s.charAt(i) - 'A'];

计算给定字符串s中每个字符的频率,并将每个字符的频率存储在数组中的特定索引处。

答案 5 :(得分:0)

count [str.charAt(i)] ++实际存储的是什么? [重复] 对于那些有相同相关问题的人,这里的答案是

第一

static final int chars = 256; 静态char count [] = new char [chars];

当我们将此代码转换为图像时,它会变成这样

0 1 2 3 4 5 6 7 8 9 .. .. .. .. .. .. 97 .. 255

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

第二

count [str.charAt(i)] ++;

假设您有str =“ abc” 然后str.charAt(0)将为“ a” 那么count ['a']意味着count [97]为什么?因为java自动将“ a”转换为ASCII码97。 然后,当您像count [97] ++一样递增count [97]的值为0时,它将变为1

0 1 2 3 4 5 6 7 8 9 .. .. .. .. .. .. 97 .. 255

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0

如果再次像count [97] ++一样递增,则它将变为2。

0 1 2 3 4 5 6 7 8 9 .. .. .. .. .. .. 97 .. 255

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0

这就是背后的全部秘密。我不介绍其他内容,因为我认为您的问题已得到回答。 如果您想测试我说的是正确的,请使用以下简单代码进行检查

public static void main(String [] argv) {

 int[] count = new int[255]; 
    count['a']++;
    System.out.println(count['a']);
    int counter=0;
    for(int i=0;i<count.length;i++) {
        System.out.println(counter++ + " " + count[i]);
    }

}