Link to code: SimpleLexicon.java
import java.util.*;
/**
* Simple Lexicon implementation simply storing
* words in a set. This makes finding WORD status
* fast, but PREFIX requires iterating over
* all the strings stored.
* <P>
* @author Owen Astrachan
*
*/
public class SimpleLexicon implements ILexicon {
private TreeSet<String> myWords;
private String myUpperBound;
public SimpleLexicon(){
myWords = new TreeSet<String>();
}
public void load(Scanner s) {
myWords.clear();
while (s.hasNext()){
myWords.add(s.next().toLowerCase());
}
myUpperBound = myWords.last()+"\0";
}
public void load(ArrayList<String> list){
myWords.clear();
myWords.addAll(list);
myUpperBound = myWords.last()+"\0";
}
public LexStatus wordStatus(String s) {
if (myWords.contains(s)){
return LexStatus.WORD;
}
if (s.compareTo(myUpperBound) > 0){
return LexStatus.NOT_WORD;
}
for(String str : myWords){
if (str.startsWith(s)) return LexStatus.PREFIX;
if (str.compareTo(s) > 0) break;
}
return LexStatus.NOT_WORD;
}
public Iterator<String> iterator() {
return myWords.iterator();
}
public int size() {
return myWords.size();
}
public LexStatus wordStatus(StringBuilder s) {
return wordStatus(s.toString());
}
}