//counts the words in a text file... //by Razii with some hints from import java.io.*; import java.util.*; public final class Jwc { private static final Map dictionary = new HashMap(16000, 0.4f); private static int tWords = 0; private static int tLines = 0; private static int 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; final int numBytes = (int) file.length(); StringBuilder sb = new StringBuilder(); boolean inword = false; FileInputStream in = new FileInputStream(arg); final byte[] buf = new byte[4096]; while (in.read(buf, 0, 4096) != -1) { for (int i = 0; i < 4096; i++) { char c = (char) buf[i]; if (c == '\n') numLines++; else if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z') { sb.append(c); inword = true; } else if (inword) { numWords++; String s = sb.toString(); int[] count = dictionary.get(s); if (count != null) {count[0]++;} else {dictionary.put(s, new int[] {1});} sb.delete(0, sb.length()); inword = false; } } } System.out.println( numLines + "\t" + numWords + "\t" + numBytes + "\t" + arg); tLines += numLines; tWords += numWords; tBytes += numBytes; } //Sorts here TreeMap sort = new TreeMap (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 pairs : sort.entrySet()) { System.out.println(pairs.getValue()[0] + "\t" + pairs.getKey()); } System.out.println("Time: " + (end - start) + " ms"); } }