CharacterSet.java
01 package gate.creole.morph;
02 
03 import java.util.Arrays;
04 
05 /**
06  <p>Title: </p>
07  <p>Description: </p>
08  <p>Copyright: Copyright (c) 2003</p>
09  <p>Company: </p>
10  @author not attributable
11  @version 1.0
12  */
13 
14 public class CharacterSet extends Variable {
15 
16   private char [] varChars;
17   /**
18    * Constructor
19    */
20   public CharacterSet() {
21 
22   }
23 
24   /**
25    * Tells if any value available which can be retrieved
26    @return true if value available, false otherwise
27    */
28   @Override
29   public boolean hasNext() {
30     if(pointer<varChars.length) {
31       return true;
32     else {
33       return false;
34     }
35   }
36 
37   /**
38    * Returns the next available value for this variable
39    @return value of the variable in the String format
40    */
41   @Override
42   public String next() {
43     if(pointer<varChars.length) {
44       pointer++;
45       return ""+varChars[pointer-1];
46     else {
47       return null;
48     }
49   }
50 
51   /**
52    * Process the provided value and stores in the underlying data structure
53    @param varName name of the variable
54    @param varValue String that contains possible different values
55    @return true if successfully stored, false otherwise
56    */
57   @Override
58   public boolean set(String varName, String varValue) {
59     this.varName = varName;
60     this.varValue = varValue;
61     // here the varValue would be in the following format
62     // [abcdefg] // we need to sort it, so that while searching it will be
63     // easier and faster to perform the binary search
64     varValue = varValue.substring(1,varValue.length()-1);
65     this.varChars = varValue.toCharArray();
66     Arrays.sort(this.varChars);
67     return true;
68   }
69 
70   /**
71    * A method that tells if the characters of the provided value are
72    * from the characterSet only
73    @param value String of which the characters to be searched in the
74    * characterSet
75    @return true if all characters of value string are from the
76    * specified characterSet, false otherwise
77    */
78   @Override
79   public boolean contains(String value) {
80     for(int i=0;i<value.length();i++) {
81       if(Arrays.binarySearch(this.varChars,value.charAt(i))<0) {
82         return false;
83       }
84     }
85     return true;
86   }
87 }