| YleisHakija.java |
1 import fi.jyu.mit.ohj2.Mjonot; // erota-funktio
2
3 /**
4 * Luokka merkkijonon hakuun, yleistetty "oliopohjainen" versio
5 * @author Miika Nurminen
6 * @version 0.1 19.3.2003
7 */
8 public class YleisHakija {
9 private String jono = null;
10
11 /**
12 * Luo uuden hakijan annetulle jonolle
13 * @param jono Jono, josta sanoja haetaan
14 */
15 public YleisHakija(String jono) {
16 this.jono = jono;
17 }
18
19 /**
20 * Metodi palauttaa annetun merkkijonon sanoista ne, jotka täsmäävät hakuehdon kanssa.
21 * Hakuehdon on toteutettava hakuehto -rajapinta
22 *
23 * @param jono Sanoja sisältävä merkkijono, josta tietoja haetaan.
24 * @param hakuehto Hakuehto, jota sovelletaan jonon sanoihin
25 * @return sanat, jotka täsmäävät hakuehdon kanssa
26 */
27 public String hae(SanaHakija hakuehto) {
28 // "surkastuneet" tapaukset
29 if (hakuehto==null) return this.jono;
30 if ((this.jono==null) || (jono.length()==0)) return jono;
31
32 // silmukka yksittäisten sanojen käsittelyyn
33 String s = null;
34 StringBuffer sb = new StringBuffer(this.jono);
35 StringBuffer result = new StringBuffer(this.jono.length());
36 while (true) {
37 if (sb.length()==0) return result.toString();
38 s = Mjonot.erota(sb,' ');
39
40 if (!hakuehto.hae(s)) continue;
41
42 if (result.length()!=0) result.append(" ");
43 result.append(s);
44 }
45 }
46
47 /**
48 * Testausmetodi hakufunktiolle
49 * @param jono Sanoja sisältävä merkkijono, josta tietoja haetaan.
50 * @param hakuehto Hakuehto, jota sovelletaan jonon sanoihin
51 */
52 public void testaa(SanaHakija hakuehto) {
53 System.out.println("Jono: "+jono+" - Hakuehto: "+hakuehto.toString());
54 System.out.println("Tulos: "+hae(hakuehto));
55 }
56
57 /**
58 * Testipääohjelma
59 * @param args Komentoriviparametrit (ei käytössä)
60 */
61 public static void main(String[] args) {
62 YleisHakija h = new YleisHakija("kissa istuu puussa ja katsoo maailman menoa");
63 String[] testitapaukset = {"k*a","k*","*a","*","istuu",null,""};
64
65 System.out.println("Testataan jokerihakua:");
66 for (int i=0; i<testitapaukset.length; i++)
67 h.testaa(new JokeriHakija(testitapaukset[i]));
68
69 System.out.println();
70
71 System.out.println("Testataan pituushakua:");
72 for (int i=0; i<9; i++)
73 h.testaa(new PituusHakija(i));
74 }
75 }
76 | YleisHakija.java |