import java.awt.Font; import java.io.File; import java.io.IOException; import java.util.Comparator; import java.util.Map; import java.util.Map.Entry; import java.util.Scanner; import java.util.Set; import java.util.TreeMap; import java.util.TreeSet; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JTextArea; /** * * @author Bill Kraynek */ public class CountWordsWithMapsAndEntrys { /** * @param args the command line arguments */ public static void main(String[] args) throws IOException { Scanner fileScanner = new Scanner(new File("src/CountWordsWithMapsAndEntrys.java")); fileScanner.useDelimiter("[^A-Za-z]+"); Map words = new TreeMap<>(new IgnoreCaseComparator()); int maxWordLength = 30; while (fileScanner.hasNext()) { String word = fileScanner.next(); if (!words.keySet().contains(word)) { words.put(word, 0); }// end if words.put(word, words.get(word) + 1); }// end while displayMap(words, maxWordLength); Set> wordsEntrys = new TreeSet<>(new EntryCountComparator()); wordsEntrys.addAll(words.entrySet()); displaySet(wordsEntrys, maxWordLength); String[] wordsArray = words.keySet().toArray(new String[0]); while (true) { String word = (String) JOptionPane.showInputDialog(null, "Pick a Word", "Words and Counts", JOptionPane.PLAIN_MESSAGE, null, wordsArray, wordsArray[0]); if (word == null) { return; } JOptionPane.showMessageDialog(null, word + " appeared " + words.get(word) + " time(s)."); } } static void displayMap(Map words, int maxWordLength) { String blanks = ""; for (int i = 0; i < maxWordLength + 1; i++) { blanks += " "; } String out = " Word" + blanks.substring(8) + "Count\n\n"; for (Entry entry : words.entrySet()) { out += entry.getKey() + blanks.substring(entry.getKey().length()) + entry.getValue() + "\n"; }// end for JTextArea outArea = new JTextArea(out, 40, 35); outArea.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 15)); JOptionPane.showMessageDialog(null, new JScrollPane(outArea)); } static void displaySet(Set> wordEntrys, int maxWordLength) { String blanks = ""; for (int i = 0; i < maxWordLength + 1; i++) { blanks += " "; } String out = " Word" + blanks.substring(8) + "Count\n\n"; for (Entry entry : wordEntrys) { out += entry.getKey() + blanks.substring(entry.getKey().length()) + entry.getValue() + "\n"; }// end for JTextArea outArea = new JTextArea(out, 40, 35); outArea.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 15)); JOptionPane.showMessageDialog(null, new JScrollPane(outArea)); } static class IgnoreCaseComparator implements Comparator { public int compare(String lhs, String rhs) { return lhs.compareToIgnoreCase(rhs); } } static class EntryCountComparator implements Comparator> { public int compare(Entry lhs, Entry rhs) { int diff = rhs.getValue() - lhs.getValue(); if (diff != 0) { return diff; } return lhs.getKey().compareToIgnoreCase(rhs.getKey()); } } }