Моя цель - создать частотное распределение каждого символа в больших плоских файлах (1 ГБ +) для последующего импорта базы данных. В идеале вывод будет списком символов ASCII, за которым следует счет.Графическое/частотное распределение появления символов в файле, включая не видимое
В настоящее время я использую hashmap для создания распределения каждого значения в строке, и это вроде работает, я просто не уверен, как реализовать это в большом файле. Кроме того, в моем выводе символы CR и LF (или/r/n) приводят к новой строке со счетом на следующем.
Вот текущий код:
public class CharCount{
public static void main(String[] args) {
String s = "abcdefghijklmnopqrstuvwxyz1234567890,.)(/\\<>[email protected]#$%^&*_-+=\r\n";
char[] arr = s.toCharArray();
HashMap <Character,Integer> count = new HashMap<Character, Integer>();
for (char c : arr) {
try {
count.put(c, count.get(c)+1);
} catch (NullPointerException e) {
count.put(c, 1);
}
}
for (Character c: count.keySet()) {
System.out.println(c + " = " + (int)c + " = " + count.get(c));
}
}
}
Идеальный выход будет выглядеть примерно так:
000 NUL 4124435 001 SOH 0
002 STX 0
003 ETX 0
.....
253 ý 0
254 þ 0
255 ÿ 0
Определенно оцените любую помощь!
И в чем же проблема, с которой вы столкнулись? (например, как ваша фактическая разница в выходе от вашего идеала?) – maerics
Не используйте catch (NullPointerException), чтобы обрабатывать случай, когда символ отсутствует на карте. Проверьте, если count.get (c) возвращает null. Это намного легче читать, а также быстрее. Исключения для исключительных случаев. –
Основная проблема заключается в применении этой логики к большому файлу, а не к короткой строке. Что касается выхода, моя, похоже, смешана, идеал должен был ее заказать. Спасибо за отзыв (NullPointerException) JB! –