您现在的位置:龙卷风首页 ›› 网络编程 ›› 阅读文章

《TIJ》第11章练习8

复习TreeMap的排序,TreeMap跟TreeSet一样,可以在构造函数中通过导入Comparator指定排序的方式。

8、修改WordCount.java,使它能够依据字母顺序进行排序。请使用第9章的工具。

注:由于在上例已经使用了AlphabeticComparator.class,在同一目录下,这次可以直接调用。TreeSet、TreeMap原来都可以在构造函数中加入Comparator对象,使之以这个Comparator指定的方法排序啊。

//: c11:WordCount.java
// Count words from a file, outputs
// results in sorted form.
import java.io.*;
import java.util.*;

class Counter {
 private int i = 1;
 int read() {
  return i;
 }
 void increment() {
  i++;
 }
}

public class WordCount {
 private FileReader file;
 private StreamTokenizer st;
 // A TreeMap keeps keys in sorted order:
 private TreeMap counts = new TreeMap(new AlphabeticComparator());
 WordCount(String filename)
 throws FileNotFoundException {
  try{
   file = new FileReader(filename);
   st = new StreamTokenizer(
    new BufferedReader(file));
   st.ordinaryChar('.');
   st.ordinaryChar(',');
  }catch(FileNotFoundException e){
   System.err.println(
    "Could not open " + filename);
   throw e;
  }
 }
 void clearup(){
  try{
   file.close();
  }catch(IOException e){
   System.err.println(
    "file.close() upsuccessful");
  }
 }
 void countWords(){
  try{
   while(st.nextToken() != st.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;
      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){
   System.err.println(
    "st.nextToken() unsuccessful");
  }
 }
 Collection values(){
  return counts.values();
 }
 Set keySet(){
  return counts.keySet();
 }
 Counter getCounter(String s){
  return (Counter)counts.get(s);
 }
 
 /**
  * Method main
  *
  *
  * @param args
  *
  */
 public static void main(String[] args)
 throws FileNotFoundException {
  // TODO: Add your code here
  WordCount wc =
  new WordCount(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.clearup();
 } 
}

作者 不见不散 本文仅代表作者观点,与龙卷风资讯网立场无关。

我来说两句

内容/Content