1   package kanta;
2   
3   /**
4    * Tarkistaja joka tarkistaa että jono sisältää vain valittuja merkkejä.
5    * Hyväksyy tyhjän jonon.
6    * @author vesal
7    *
8    */
9   public class SisaltaaTarkistaja implements Tarkistaja {
10  
11      /** Numeroita vastaavat kirjaimet */
12      public static final String NUMEROT = "0123456789";
13  
14      /** Desimaalilukuun käyvät kirjaimet */
15      public static final String DESIMAALINUMEROT = "0123456789.,";
16  
17      /**
18       * Onko jonossa vain sallittuja merkkejä
19       * @param jono      tutkittava jono
20       * @param sallitut  merkit joita sallitaan
21       * @return true jos vain sallittuja, false muuten
22       * @example
23       * <pre name="test">
24       *   onkoVain("123","12")   === false;
25       *   onkoVain("123","1234") === true;
26       *   onkoVain("","1234") === true;
27       * </pre> 
28       */
29      public static boolean onkoVain(String jono, String sallitut) {
30          for (int i=0; i<jono.length(); i++)
31              if ( sallitut.indexOf(jono.charAt(i)) < 0 ) return false;
32          return true;
33      }
34  
35  
36      private final String sallitut;
37  
38  
39      /**
40       * Luodaan tarkistaja joka hyväksyy sallitut merkit
41       * @param sallitut hyväksyttävät merkit
42       */
43      public SisaltaaTarkistaja(String sallitut) {
44          this.sallitut = sallitut;
45      }
46  
47  
48      /**
49       * Tarkistaa että jono sisältää vain valittuja numeroita
50       * @param jono tutkittava jono
51       * @return null jos vain valittujan merkkejä, muuten virheilmoitus
52       * @example
53       * <pre name="test">
54       *   SisaltaaTarkistaja tar = new SisaltaaTarkistaja("123");
55       *   tar.tarkista("12") === null;
56       *   tar.tarkista("14") === "Saa olla vain merkkejä: 123";
57       *   tar.tarkista("")   === null;
58       * </pre>
59       */
60      @Override
61      public String tarkista(String jono) {
62          if ( onkoVain(jono, sallitut) ) return null;
63          return "Saa olla vain merkkejä: " + sallitut;
64      }
65  
66  }
67