我遇到了一些我不理解的代码。它与保持字符串中的字母计数有关。我已经评论了我没有得到的部分。我将不胜感激任何帮助。谢谢!
我尝试过在线查找,但似乎没有一个答案。
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;
}
}
答案 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中,依此类推。