Вы получаете доступ к c[j]
вне цикла, который вы завершили: его значение равно c.length
, что не является правильным индексом.
Вам необходимо переместить оператор println
на одну строкуи измените c[j]
на c[i]
.
Я бы переписал его с Stream API:
s.chars()
.mapToObj(c -> (char)c)
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
.forEach((k, v) -> System.out.format("The letter %c appears %d times\n", k, v));