001    import java.io.*;
002    import fi.jyu.mit.ohj2.*;
003    import java.util.StringTokenizer;
004    import java.util.HashMap;
005    import java.util.Map;
006    import java.util.Set;
007    import java.util.Iterator;
008    
009    /**
010     * Luokka sanojen esiintymismäärien laskemiseksi.  Toteutettu
011     * HashMap-luokalle ja erillisellä Laskuri-luokalla.
012     * @author Vesa Lappalainen
013     * @version 1.0, 16.03.2003
014     */
015    public class SanatMap {
016    
017      public class Laskuri {
018        private int arvo;
019        public Laskuri(int arvo) { this.arvo = arvo; }
020        public void lisaa() { arvo++; }
021        public String toString() { return ""+arvo; }
022      }
023    
024    
025      Map alkiot = new HashMap();
026    
027      public void lisaa(String s) {
028        Laskuri sana = (Laskuri)alkiot.get(s);
029        if ( sana != null ) {
030          sana.lisaa();
031          return;
032        }
033        sana = new Laskuri(1);
034        alkiot.put(s,sana);
035      }
036    
037      public void tulosta(OutputStream os) {
038        PrintStream out = Tiedosto.getPrintStream(os);
039        Set entrySet = alkiot.entrySet();
040        for (Iterator i=entrySet.iterator(); i.hasNext(); )
041          out.println(i.next());
042      }
043    
044    
045      public void kasitteleRivi(String rivi) {
046        String sana;
047        StringTokenizer st = new StringTokenizer(rivi," ,();.:[]{}+-");
048        while ( st.hasMoreTokens() ) {
049          sana = st.nextToken();
050          lisaa(sana);
051        }
052      }
053    
054      public void lueTiedosto(String tied) throws IOException {
055        BufferedReader fi = Tiedosto.avaa_lukemista_varten(tied);
056        if ( fi == null ) throw new FileNotFoundException("Ei löydy: " + tied);
057    
058        try {
059          String rivi;
060          while ( ( rivi = fi.readLine() ) != null  ) {
061            kasitteleRivi(rivi);
062          }
063        } finally {
064          fi.close();
065        }
066      }
067    
068    
069      public static void main(String[] args)  {
070        SanatMap sanat = new SanatMap();
071        sanat.lisaa("kissa");
072        sanat.lisaa("kissa");
073        sanat.lisaa("koira");
074        sanat.tulosta(System.out);
075        sanat.kasitteleRivi("kissa, istuu kissa puussa");
076        sanat.tulosta(System.out);
077      }
078    }