如何保持数组中不同事物的计数?

时间:2019-01-16 06:00:00

标签: java

我遇到了一些我不理解的代码。它与保持字符串中的字母计数有关。我已经评论了我没有得到的部分。我将不胜感激任何帮助。谢谢!

我尝试过在线查找,但似乎没有一个答案。

public class test2 {
    static int[] inventory;
    public static final int ALPHABET = 26;

    public static void main(String[] args) {
        inventory = new int [ALPHABET];
        String dog = "There goes the dog!";

        int size = count(dog);
        System.out.println(size);

    }

    private static int count(String data) {
        data = data.toLowerCase();
        int size = 0;
        for (int i = 0; i < data.length(); i++) {
            char ch = data.charAt(i);
            if (Character.isLetter(ch)) {
                size++;
                inventory[ch - 'a']++; // this I don't get
            }
        }
        return size;
    }
}

3 个答案:

答案 0 :(得分:4)

在这种情况下,inventory是大小为26的数组,其中包含每个字符出现在字符串中的次数。

您添加了注释的语句正试图从字符串中的字符中减去a的ASCII值97。例如,b的ASCII值为98,而'b' - 'a'为1。因此,库存[1]递增,即b出现在您的字符串中一次。

答案 1 :(得分:2)

System.out.println(0 + 'c'); //ASCII value of 'c'; will print 99
System.out.println(0 + 'a'); //ASCII value of 'a'; will print 97
System.out.println('c' - 'a'); //Difference of ASCII values of characters; will print 99-97=2

以您的情况

inventory[ch - 'a']++;

ch将是一些字符。
ch - 'a'将是该字符与“ a”的距离。例如,如上所示,'c' - 'a' = 2
inventory[ch - 'a']将指向数组中索引ch - 'a'处的数字。
inventory[ch - 'a']++将使该值增加1。

答案 2 :(得分:0)

根据上述代码,您正在尝试计算每个字母的数量。
因此,对于每个字母,我们假设您使用一个存储桶。这由new int [ALPHABET];完成。因此,您有26个插槽,从0到25。
现在,当您计算字母时:
每个字母都有一个为其分配的值(ASCII值)。小写字母a的ASCII值为97。但是,在您的插槽中,您想将a添加到插槽0。因此,您该怎么做:您减去97,即减去{{ 1}}。
因此,现在a存储在插槽0中,a存储在插槽1中,依此类推。