ВСЕМ КТО БУДЕТ МУЧИТЬСЯ С ЭТОЙ ЗАДАЧЕЙ - СИМВОЛЫ НУЖНО СЧИТЫВАТЬ ПОСИМВОЛЬНО, А НЕ ЧЕРЕЗ БУФЕР ЕДИНОЙ СТРОКОЙ.
По условию в тексте только английские символы. Таблицы ASCII для них не включает 128 позиций. Я резонно предположил, что первым на выходе должен идти символ с кодом "0", последним - 127. Эта идея отработана в строчках 44-50.
Тестировал на предложении:
Turkey’s - currency plunged again Monday, rattling other vulnerable emerging markets, as a defiant speech from President Recep Tayyip Erdogan and policy moves from the nation’s central bank failed to assuage investors about the country’s perilous financial condition.
Результаты вывода:
37
, 2
- 1
. 1
E 1
M 1
P 1
R 1
T 2
a 21
b 3
c 9
d 8
e 24
f 5
g 7
h 4
i 15
k 3
l 9
m 5
n 21
o 15
p 6
r 16
s 13
t 15
u 8
v 3
y 7
В чем мой прокол?(((
package com.javarush.task.task18.task1821;
/*
Встречаемость символов
*/
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) throws Exception{
// ! /Users/dmitrijlanin/Documents/mama.txt
FileInputStream fileInputStream = new FileInputStream(args[0]);
BufferedReader reader = new BufferedReader(new InputStreamReader(fileInputStream));
String allStr = "";
String current = "";
while ((current = reader.readLine()) != null){
allStr = allStr+current;
current = "";
}
fileInputStream.close();
reader.close();
allStr = allStr.trim();
char[] chars = allStr.toCharArray();
HashMap<Character, Integer> list = new HashMap<>();
for(int i=0; i<chars.length; i++){
if(!list.containsKey(chars[i])){
list.put(chars[i], 1);
}else{
list.put(chars[i], list.get(chars[i])+1);
}
}
char lt = ' ';
for (int i=0; i<=256; i++){
lt = (char) i;
if(list.get(lt) != null){
System.out.println(lt + " " + list.get(lt));
}
}
}
}
/*
Встречаемость символов
Программа запускается с одним параметром - именем файла, который содержит английский текст.
Посчитать частоту встречания каждого символа.
Отсортировать результат по возрастанию кода ASCII (почитать в инете).
Пример:
','=44, 's'=115, 't'=116.
Вывести на консоль отсортированный результат:
[символ1] частота1
[символ2] частота2
Закрыть потоки.
Пример вывода:
, 19
- 7
f 361
Требования:
1. Считывать с консоли ничего не нужно.
2. Создай поток для чтения из файла, который приходит первым параметром в main.
3. В файле необходимо посчитать частоту встречания каждого символа и вывести результат.
4. Выведенный в консоль результат должен быть отсортирован по возрастанию кода ASCII.
5. Поток для чтения из файла должен быть закрыт.
*/