1   import java.io.*;
2   import fi.jyu.mit.ohj2.*;
3   import java.util.StringTokenizer;
4   import java.util.HashMap;
5   import java.util.Map;
6   import java.util.Set;
7   import java.util.Iterator;
8   
9   /**
10   * Luokka sanojen esiintymismäärien laskemiseksi.  Toteutettu
11   * HashMap-luokalle ja erillisellä Laskuri-luokalla.
12   * @author Vesa Lappalainen
13   * @version 1.0, 16.03.2003
14   */
15  public class SanatMap {
16  
17    public class Laskuri {
18      private int arvo;
19      public Laskuri(int arvo) { this.arvo = arvo; }
20      public void lisaa() { arvo++; }
21      public String toString() { return ""+arvo; }
22    }
23  
24  
25    Map alkiot = new HashMap();
26  
27    public void lisaa(String s) {
28      Laskuri sana = (Laskuri)alkiot.get(s);
29      if ( sana != null ) {
30        sana.lisaa();
31        return;
32      }
33      sana = new Laskuri(1);
34      alkiot.put(s,sana);
35    }
36  
37    public void tulosta(OutputStream os) {
38      PrintStream out = Tiedosto.getPrintStream(os);
39      Set entrySet = alkiot.entrySet();
40      for (Iterator i=entrySet.iterator(); i.hasNext(); )
41        out.println(i.next());
42    }
43  
44  
45    public void kasitteleRivi(String rivi) {
46      String sana;
47      StringTokenizer st = new StringTokenizer(rivi," ,();.:[]{}+-");
48      while ( st.hasMoreTokens() ) {
49        sana = st.nextToken();
50        lisaa(sana);
51      }
52    }
53  
54    public void lueTiedosto(String tied) throws IOException {
55      BufferedReader fi = Tiedosto.avaa_lukemista_varten(tied);
56      if ( fi == null ) throw new FileNotFoundException("Ei löydy: " + tied);
57  
58      try {
59        String rivi;
60        while ( ( rivi = fi.readLine() ) != null  ) {
61          kasitteleRivi(rivi);
62        }
63      } finally {
64        fi.close();
65      }
66    }
67  
68  
69    public static void main(String[] args)  {
70      SanatMap sanat = new SanatMap();
71      sanat.lisaa("kissa");
72      sanat.lisaa("kissa");
73      sanat.lisaa("koira");
74      sanat.tulosta(System.out);
75      sanat.kasitteleRivi("kissa, istuu kissa puussa");
76      sanat.tulosta(System.out);
77    }
78  }
79