Я думаю, что не имеет смысла использовать BufferedReader
, чтобы проходить файл строка за строкой, а затем проходить каждую строку символ за символом.Это не нужно, сложно и неэффективно, учитывая, что вы просто хотите перебирать все символы: это именно та функция, которую Reader
дает вам в первую очередь.
Вы могли бы значительно упростить свою рутину, вот так:
[...]
BufferedReader br = new BufferedReader(fr);
for (int c; (c = br.read()) > -1;) {
char character = Character.toUpperCase((char) c);
if ((character >= 'A') && (character <= 'Z')) {
count[character - 'A']++;
}
}
} catch (IOException g) { /* this is no good */ }
return count;
Таким образом, вы полностью избавитесь от text2
, ваш код будет короче, и ваша программа будет работать быстрее (если можно измерить), потому что ненужная конструкция String отброшена.
PS: несвязанное примечание: убедитесь, что вы обрабатываете случай, когда пользователь нажимает кнопку «Отмена» в диалоговом окне выбора файлов.
PPS: может ли пользователь случайно выбрать каталог вместо подходящего файла в вашей программе?Что будет потом?