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 }