package tiedosto; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.IOException; import java.io.OutputStream; import java.io.PrintStream; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.StringTokenizer; import fi.jyu.mit.ohj2.Tiedosto; /** * Luokka sanojen esiintymism��rien laskemiseksi. Toteutettu * HashMap-luokalla ja erillisell� Laskuri-luokalla. * @author Vesa Lappalainen * @version 1.0, 16.03.2003 */ @SuppressWarnings("javadoc") public class SanatMap { public static class Laskuri { private int arvo; public Laskuri(int arvo) { this.arvo = arvo; } public void lisaa() { arvo++; } @Override public String toString() { return ""+arvo; } } private Map<String, Laskuri> alkiot = new HashMap<>(); public void lisaa(String s) { Laskuri sana = alkiot.get(s); if ( sana != null ) { sana.lisaa(); return; } sana = new Laskuri(1); alkiot.put(s,sana); } public void tulosta(OutputStream os) { @SuppressWarnings("resource") PrintStream out = Tiedosto.getPrintStream(os); Set<Entry<String,Laskuri>> entrySet = alkiot.entrySet(); for (Iterator<Entry<String, Laskuri>> i=entrySet.iterator(); i.hasNext(); ) out.println(i.next()); } public void kasitteleRivi(String rivi) { String sana; StringTokenizer st = new StringTokenizer(rivi," ,();.:[]{}+-"); while ( st.hasMoreTokens() ) { sana = st.nextToken(); lisaa(sana); } } public void lueTiedosto(String tied) throws IOException { @SuppressWarnings("resource") BufferedReader fi = Tiedosto.avaa_lukemista_varten(tied); if ( fi == null ) throw new FileNotFoundException("Ei l�ydy: " + tied); try { String rivi; while ( ( rivi = fi.readLine() ) != null ) { kasitteleRivi(rivi); } } finally { fi.close(); } } public static void main(String[] args) { SanatMap sanat = new SanatMap(); sanat.lisaa("kissa"); sanat.lisaa("kissa"); sanat.lisaa("koira"); sanat.tulosta(System.out); sanat.kasitteleRivi("kissa, istuu kissa puussa"); sanat.tulosta(System.out); } }