import java.awt.Font; import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Scanner; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JTextArea; /** * * @author Bill Kraynek */ public class CountWordsWithMinimalWordClass { /** * @param args the command line arguments */ public static void main(String[] args) throws Exception { Scanner fileScanner = new Scanner(new File("src/CountWords.java")); fileScanner.useDelimiter("[^A-Za-z]+"); ArrayList words = new ArrayList(); int maxWordLength = 0; while (fileScanner.hasNext()) { String word = fileScanner.next(); int index = indexOfWord(words,word); if ( index < 0 ) { words.add(new WordClass(word)); index = words.size()-1; if (maxWordLength < word.length()) { maxWordLength = word.length(); }// end if }// end if words.get(index).incrementCount(); }// end while display(words, maxWordLength); Collections.sort(words, new AlphaWordsComparator()); display(words, maxWordLength); Collections.sort(words, new CountWordsComparator()); display(words, maxWordLength); } static int indexOfWord(ArrayList words, String word) { for( int i = 0; i < words.size(); i++ ) { if( words.get(i).getWord().equals(word) ) return i; }// end for return -1; }// end containsWord static void display(ArrayList words, int maxWordLength) { String blanks = ""; for ( int i = 0; i < maxWordLength + 1; i++ ) blanks += " "; String out = " Word" + blanks.substring(8) + "Count\n\n"; for ( int i = 0; i < words.size(); i++ ) { out += words.get(i).getWord() + blanks.substring(words.get(i).getWord().length()) + words.get(i).getCount() + "\n"; }// end for JTextArea outArea = new JTextArea(out,50,30); outArea.setFont(new Font(Font.MONOSPACED,Font.PLAIN,15)); JOptionPane.showMessageDialog(null, new JScrollPane(outArea)); } } class WordClass { private String word; private int count; public WordClass(String word) { this.word = word; count = 0; } public String getWord() { return word; } public int getCount() { return count; } public void incrementCount() { count++; } }// end WordClass class AlphaWordsComparator implements Comparator { public int compare(WordClass lhs, WordClass rhs) { return lhs.getWord().compareTo(rhs.getWord()); } } class CountWordsComparator implements Comparator { public int compare(WordClass lhs, WordClass rhs) { int countDifference = rhs.getCount() - lhs.getCount(); if (countDifference != 0) { return countDifference; } return lhs.getWord().compareTo(rhs.getWord()); } }// end WordCountComparator