package fna.parsing.character; import java.util.*; public class StateGroup { private ArrayList<State> list = null; private int count = 1; public StateGroup() { this.list = new ArrayList<State>(); } public void addState(State s){ list.add(s); } public State getState(int i){ return (State)list.get(i); } public int getIndex(State state){ for(int i = 0; i<list.size(); i++){ if(list.get(i).toString().compareTo(state.toString()) == 0){ return i; } } return -1; } public int size(){ return list == null? 0 : list.size(); } public int numberOfAssociated(){ int c = 0; Iterator<State> it = list.iterator(); while(it.hasNext()){ if(((State)it.next()).associatedWithCharacter()){ c++; } } return c; } public void increment(){ count++; } public int getCount(){ return count; } public ArrayList<State> freeStates(){ ArrayList<State> freestates = new ArrayList<State>(); Iterator<State> it = list.iterator(); //int i = 0; while(it.hasNext()){ State s = (State)it.next(); if(!s.associatedWithCharacter()){ freestates.add(s); } } return freestates; } public ArrayList<State> nonCategoryStates(String category){ ArrayList<State> alist = new ArrayList<State>(); Iterator<State> it = list.iterator(); //int i = 0; while(it.hasNext()){ State s = (State)it.next(); if(!s.associatedWithCharacter(category)){ alist.add(s); } } return alist; } public String mostFreqCategory(){ ArrayList<String> categories = seenCategories(); Hashtable<String, String> counter = new Hashtable<String, String>(); Iterator<String> it = categories.iterator(); while(it.hasNext()){ String cat = (String)it.next(); String count = (String) counter.get(cat); if(count == null){ counter.put(cat, "1"); }else{ count += "1"; counter.put(cat, count); } } int max = 0; String thecat = ""; String thecount = ""; Enumeration<String> en = counter.keys(); while(en.hasMoreElements()){ String cat = (String)en.nextElement(); String count = (String)counter.get(cat); if(count.length() > max){ max = count.length(); thecat = cat; thecount = count; } } return thecat+"#"+thecount; } public ArrayList<String> seenCategories(){ ArrayList<String> seen = new ArrayList<String>(); Iterator<State> it = list.iterator(); //int i = 0; while(it.hasNext()){ State s = (State)it.next(); seen.addAll(s.getCharacters()); } return seen; } public String toString(){ String [] names = new String[list.size()]; Iterator<State> it = list.iterator(); int i = 0; while(it.hasNext()){ State s = (State)it.next(); names[i++] = s.toString(); } Arrays.sort(names); StringBuffer sb = new StringBuffer(); for(i = 0; i <names.length; i++){ sb.append(names[i]+"|"); } return sb.toString(); } }