我是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']++;
是什么意思?
答案 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
变量中的值可以表示为整数。字母A
为65
,a
为97
(有关更多信件,请参阅ASCII
table)。
list[c-'A']++;
此代码表示取c
的值(介于65
和90
之间[由于if ( c >= 'A' && c <= 'Z' )
])并减少{{1}的值}(即A
)。这将返回数组65
中的索引并增加其当前值。
示例:c是list
:
C
因此,索引C = 67
A = 65
C - A = 2
将会更改。索引2
是第三个元素,如2
是字母表中的第三个字母。