Counter.java Source code

Java tutorial

Introduction

Here is the source code for Counter.java

Source

// : 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;

class Counter {
    private int i = 1;

    public int read() {
        return i;
    }

    public void increment() {
        i++;
    }
}

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('-');
        } 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();
    }
} ///:~