// counts words //combined effort: wlfshmn from #java on IRC Undernet and Raziiimport java.io.*;import java.util.*;public final class WordCount3{ //counts the words in a text file... private static final Map<String, int[]> dictionary = new HashMap<String, int[]>(500000); private static int tWords = 0; private static int tLines = 0; private static long tBytes = 0; public static void main(final String[] args) throws Exception { System.out.println("Lines\tWords\tBytes\tFile\n"); //TIME STARTS HERE final long start = System.currentTimeMillis(); for (String arg : args) { File file = new File(arg); if (!file.isFile()) { continue; } int numLines = 0; int numWords = 0; long numBytes = file.length(); Integer I1 = new Integer(1); BufferedReader input = new BufferedReader(new InputStreamReader(new FileInputStream(arg), "ISO-8859-1")); StreamTokenizer st = new StreamTokenizer(input); st.ordinaryChar('/'); st.ordinaryChar('.'); st.ordinaryChar('-'); st.ordinaryChar('"'); st.ordinaryChar('\''); st.eolIsSignificant(true); while (st.nextToken() != StreamTokenizer.TT_EOF) { if (st.ttype == StreamTokenizer.TT_EOL) { numLines++; } else if (st.ttype == StreamTokenizer.TT_WORD) { numWords++; countWord(st.sval); } } System.out.println( numLines + "\t" + numWords + "\t" + numBytes + "\t" + arg); tLines += numLines; tWords += numWords; tBytes += numBytes; } //only converting it to TreepMap so the result appear ordered, I could have //moved this part down to printing phase (i.e. not include it in time). TreeMap<String, int[] > sort = new TreeMap<String, int[]> (dictionary); //TIME ENDS HERE final long end = System.currentTimeMillis(); System.out.println("---------------------------------------"); if (args.length > 1) { System.out.println(tLines + "\t" + tWords + "\t" + tBytes + "\tTotal"); System.out.println("---------------------------------------"); } for (Map.Entry<String, int[]> pairs : sort.entrySet()) { System.out.println(pairs.getValue()[0] + "\t" + pairs.getKey()); } System.out.println("Time: " + (end - start) + " ms"); } private static void countWord(String word) { int[] count = dictionary.get(word); if (count != null) { count[0]++; } else { dictionary.put(word, new int[]{1}); } }}