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. *

* @author Owen Astrachan * */ public class SimpleLexicon implements ILexicon { private TreeSet myWords; private String myUpperBound; public SimpleLexicon(){ myWords = new TreeSet(); } public void load(Scanner s) { myWords.clear(); while (s.hasNext()){ myWords.add(s.next().toLowerCase()); } myUpperBound = myWords.last()+"\0"; } public void load(ArrayList 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 iterator() { return myWords.iterator(); } public int size() { return myWords.size(); } public LexStatus wordStatus(StringBuilder s) { return wordStatus(s.toString()); } }