Counts Words in a File, Outputs Results in Sorted Form
From Java Example Source Code
Contents |
[edit] Overview - Counts Words in a File, Outputs Results in Sorted Form
This Java example shows how to count words in a file, and output results in sorted form.
[edit] Java Source Code
- Package: com.bruceeckel
- File: WordCount1.java
package com.bruceeckel; //: c12:WordCount.java //Counts words in a file, outputs results in sorted form. //{Args: WordCount.java} //From 'Thinking in Java, 3rd ed.' (c) Bruce Eckel 2002 //www.BruceEckel.com. See copyright notice in CopyRight.txt. import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.StreamTokenizer; import java.util.Collection; import java.util.Iterator; import java.util.Set; import java.util.TreeMap; public class WordCount1 { private static final String usage = "Usage: \nWordCount file\n" + "Counts the words in the file and " + "outputs results in sorted form."; private FileReader file; private StreamTokenizer st; // A TreeMap keeps keys in sorted order: private TreeMap counts = new TreeMap(); public WordCount1(String filename) throws FileNotFoundException { try { file = new FileReader(filename); st = new StreamTokenizer(new BufferedReader(file)); st.ordinaryChar('.'); st.ordinaryChar('-'); //added by Code Panda st.ordinaryChar('/'); } catch (FileNotFoundException e) { throw new RuntimeException(e); } } public void dispose() { try { file.close(); } catch (IOException e) { throw new RuntimeException(e); } } public void countWords() { try { while (st.nextToken() != StreamTokenizer.TT_EOF) { String s; switch (st.ttype) { case StreamTokenizer.TT_EOL: s = new String("EOL"); break; case StreamTokenizer.TT_NUMBER: s = Double.toString(st.nval); break; case StreamTokenizer.TT_WORD: s = st.sval; // Already a String break; default: // single character in ttype s = String.valueOf((char) st.ttype); } if (counts.containsKey(s)) ((Counter) counts.get(s)).increment(); else counts.put(s, new Counter()); } } catch (IOException e) { throw new RuntimeException(e); } } public Collection values() { return counts.values(); } public Set keySet() { return counts.keySet(); } public Counter getCounter(String s) { return (Counter) counts.get(s); } public static void main(String[] args) throws FileNotFoundException { if (args.length == 0) { System.out.println(usage); System.exit(1); } WordCount1 wc = new WordCount1(args[0]); wc.countWords(); Iterator keys = wc.keySet().iterator(); while (keys.hasNext()) { String key = (String) keys.next(); System.out.println(key + ": " + wc.getCounter(key).read()); } wc.dispose(); } }
- Package: com.bruceeckel
- File: Counter.java
package com.bruceeckel; public class Counter { int i = 1; public String toString() { return Integer.toString(i); } public int read() { return i; } public void increment() { i++; } }
[edit] What Result You Can Get
Run the program without parameter, you will get:
Usage: WordCount file Counts the words in the file and outputs results in sorted form.
Save the following text as file C:\exampleshow\exampleshow.txt:
Hello, http://java.exampleshow.com I love you, java.exampleshow.com It's so funny!
and run the program with the following parameter:
c:\exampleshow\exampleshow.txt
then you will get:
': 1 ,: 2 .: 4 /: 2 :: 1 Hello: 1 I: 1 It: 1 com: 2 exampleshow: 2 http: 1 java: 2 love: 1 you: 1
[edit] Required External Library for this Java Example
Need nothing.
[edit] How to Run this Java Example Program
We recommend running this Java example program with Eclipse.
For assistance in working with Eclipse, please see How to Run Java Program with Eclipse.
It's fairly easy.
