在以下迭代中
char[] chars = new char[26];
for (int i = 0; i < string.length(); i++)
{
chars[string.charAt(i) - 'a']++;
}
字符串中的位置必须是chars[String.charAt(i) - 'a']
而不是chars[String.charAt(i)]
,否则将抛出ArrayIndexOutOfBoundsException。为什么会这样?
答案 0 :(得分:3)
因为如果你尝试使用char作为索引值,它会获取该字符的ascii值,因为它需要一个整数。您定义的数组大小为26.因此,ascii值大于25的任何char都将导致ArrayIndexOutOFBoundsException。
当你做string.charAt(i) - &#39; a&#39;基本上你要减去&#39; a&#39;的ascii值。来自string.charAt(i)的ascii值。这有助于从索引0到25访问字符a到z。
你还应该确保字符串中的所有字符都是小写的,否则你将再次遇到同样的问题。