Для подсчета букв в слове вы можете использовать гораздо более простой метод:
определить массив с 26 нулями, отсканировать входную строку и увеличить соответствующий индекс в этом массиве, так что если вы встречаете 'a' (или 'A '- это та же буква, но другой символ) - вы увеличите значение с индексом 0, b - с индексом 1 и т. д. c
, во время этого сканирования вы также можете вычислить наиболее часто встречающийся символ, например:
public static void main(final String[] args) throws IOException {
char maxSymbol = 0;
int maxCount = 0;
final int[] counts = new int[26]; // number of times each letter (a-z) appears in string
try (final BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
final String s = br.readLine().toLowerCase(); // calculate case-insensitive counts
for (final char c : s.toCharArray()) {
final int idx = c - 'a'; // convert form ASCII code to 0-based index
counts[idx]++;
if (counts[idx] > maxCount) {
maxSymbol = c; // we found most occurred symbol for the current moment
maxCount = counts[idx];
} else if (counts[idx] == maxCount) { // we found 2nd most occurred symbol for the current moment, need to check which one is minimal in lexicographical order
if (c < maxSymbol) {
maxSymbol = c;
}
}
}
}
if (maxSymbol > 0) {
System.out.println("Most frequent symbol " + maxSymbol + " occurred " + maxCount);
}
}
Я использовал буферизованный ридер для получения данных из стандартного ввода, но я понятия не имею, куда поместить буферизированный писатель здесь, может быть, для печати результата?