Посчитать частоту встречания каждого символа.
Отсортировать результат по возрастанию кода ASCII (почитать в инете).
Пример:
‘,’=44, ‘s’=115, ‘t’=116.
Вывести на консоль отсортированный результат:
[символ1] частота1
[символ2] частота2
Закрыть потоки.
Пример вывода:
, 19
- 7
f 361
Требования:
1. Считывать с консоли ничего не нужно.
2. Создай поток для чтения из файла, который приходит первым параметром в main.
3. В файле необходимо посчитать частоту встречания каждого символа и вывести результат.
4. Выведенный в консоль результат должен быть отсортирован по возрастанию кода ASCII.
5. Поток для чтения из файла должен быть закрыт.
public static void main(String[] args) throws IOException {
FileInputStream inputStream = new FileInputStream(args[0]);
//создаю map для отсортированного списка по ключу (байту)
TreeMap<Integer,Integer> map = new TreeMap<>();
while (inputStream.available() > 0) {
int data = inputStream.read();
if (map.containsKey(data)){ //если байт есть в карте
for (Map.Entry<Integer, Integer> me: map.entrySet()) { //ищу ключ
if (me.getKey().equals(data))
me.setValue(me.getValue()+1); //нахожу и увеличиваю значение Value
}
} else
map.put(data, 1); //если ключа нет добавляю в карту и ставлю значение 1
}
inputStream.close();
for (Map.Entry<Integer,Integer> go: map.entrySet()) {
System.out.println(go.getKey().toString() + " " + go.getValue()); //преобразую байт в строку и вывожу результат
}
}
По моему самое логичное решение, но не могу понять где я не прав.