Counts Words in a File, Outputs Results in Sorted Form

From Java Example Source Code

Jump to: navigation, search

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.

Personal tools