/****************************************************************************** * This program reads characters from STDIN and then computes a frequency table. * * Copyright © 2020 Richard Lesh. All rights reserved. *****************************************************************************/ import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import org.pureprogrammer.Utils; public class FrequencyTableChars { public static void main(String[] args) { int totalCount = 0; Map countTable = new HashMap<>(); int c; while ((c = Utils.getchar()) != -1) { if (!countTable.containsKey(c)) { countTable.put(c, 1); } else { countTable.put(c, countTable{c} + 1); } ++totalCount; } System.out.println("Hex\tChar\tCount\tFreq"); final List sortedKeys = Utils.sort(List.copyOf(countTable.keySet())); for (int x : sortedKeys) { final double FREQ = countTable.get(x) / (double)(totalCount); if (Character.isISOControl(x)) { System.out.println(Utils.format("{0:05x}\t0x{0:x}\t{1:d}\t{2:.4f}", x, countTable.get(x), FREQ)); } else { System.out.println(Utils.format("{0:05x}\t{1:c}\t{2:d}\t{3:.4f}", x, String.valueOf(Character.toChars(x)), countTable.get(x), FREQ)); } } } }