Java 通过字符访问数组项的混乱代码段
我在网上找到了这段代码,它返回字符串中最常见的字符。在下面指出的点上,我们有表达式Java 通过字符访问数组项的混乱代码段,java,arrays,character,Java,Arrays,Character,我在网上找到了这段代码,它返回字符串中最常见的字符。在下面指出的点上,我们有表达式++charcnt[ch]。据我所知,charcnt是一个int[],任何数组的元素都必须通过一个表示特定元素索引号的整数来访问ch是一个字符,但是。。。我运行了代码,没有错误。为什么它不给出一个错误?我知道我们正试图增加计数,但我不明白如何使用字符访问数组。如有任何澄清,将不胜感激 public static char getMax(String word) { if (word == null || w
++charcnt[ch]
。据我所知,charcnt是一个int[]
,任何数组的元素都必须通过一个表示特定元素索引号的整数来访问ch
是一个字符,但是。。。我运行了代码,没有错误。为什么它不给出一个错误?我知道我们正试图增加计数,但我不明白如何使用字符访问数组。如有任何澄清,将不胜感激
public static char getMax(String word) {
if (word == null || word.isEmpty()) {
throw new IllegalArgumentException("input word must have non-empty value.");
}
char maxchar = ' ';
int maxcnt = 0;
// if you are confident that your input will be only ascii, then this array can be size 128.
int[] charcnt = new int[Character.MAX_VALUE + 1];
for (int i = word.length() - 1; i >= 0; i--) {
char ch = word.charAt(i);
// increment this character's cnt and compare it to our max.
if (++charcnt[ch] >= maxcnt) { #HERE
maxcnt = charcnt[ch];
maxchar = ch;
}
}
return maxchar;
}
当您尝试使用字符访问整数数组时,Java将自动将字符转换为其ASCII值。来自(emphasis mine) 数组必须由int值索引;short、byte或char值也可用作索引值,因为它们受到一元数字提升(§5.6.1)的影响,变成int值
ASCII码有128个不同的字符,其整数值从0到127。
例如,char A的值为65,这意味着它可以用来指向maxcnt的第66个单元格,递增其计数器。根据java规范 数组必须由int值索引;short、byte或char值可以是 也可用作索引值,因为它们受一元数约束 数字提升(§5.6.1)并成为整数值。试图访问 具有长索引值的数组组件会导致编译时 错误
char可以转换为int。请看一下ASCII表
ch
被提升为int
在索引建立之前,搜索char
不仅仅是ASCII。该代码段假设的是ASCII,正如它所说的那样。该代码段没有假设。它表示,如果您的输入仅包含ASCII字符,则可以减少计数器数组的长度。不要困惑。默认情况下,Java使用UTF 8,并且String
类有一个char[]
来存储它,所以char
并不像您在文章中所说的那样仅限于ASCII。我不知道您在哪里读到我在文章中写的“char被限制为ASCII”。顺便说一句,我知道您是对的,但这并不是这个问题的重点,它只是指ASCII