/** * MyStringTokenizer * classe didattica in grado di estrarre lessemi (token) da una stringa di caratteri. * * @author Adriano Luchetta * @version 4-Nov-2006 * */ import java.util.NoSuchElementException; public class MyStringTokenizer { private final String DELIMITERS; private final String STRING; private int index; /** permette di definire tramite una stringa l'insieme dei caratteri delimitatori @param aString la stringa da cui estrarre i lessemi @param someDelimiters i caratteri delimitatori @throws IllegalArgumentException se uno dei due parametri ha valore null o se la stringa someDelimiters e' la stringa vuota */ public MyStringTokenizer(String aString, String someDelimiters) { //Gestione delle pre-condizioni if (aString == null || someDelimiters == null || someDelimiters.length() == 0) throw new IllegalArgumentException(); STRING = aString; DELIMITERS = someDelimiters; index = 0; } /** usa come caratteri delimitatori i caratteri whitespaces @param aString la stringa da cui estrarre i lessemi */ public MyStringTokenizer(String aString) { if (aString == null) throw new IllegalArgumentException(); STRING = aString; DELIMITERS = null; index = 0; } /** verifica se e' presente un token successivo nella stringa in esame @return true se e solo se c'e' almeno un token nella stringa dopo la posizione corrente, falso altrimenti */ public boolean hasNext() { if (index >= STRING.length()) return false; while (index < STRING.length() && isDelimiter(STRING.charAt(index))) index++; return index < STRING.length(); } /** restituisce il prossimo token nella stringa in esame @return la prossima stringa, se questa e' presente @throws java.util.NoSuchElementException se non e' presente una prossima stringa */ public String next() { if (!hasNext()) // aggiungere al codice throw new NoSuchElementException(); String token = ""; while (index < STRING.length() && !isDelimiter(STRING.charAt(index))) { token = token + STRING.charAt(index); index++; } return token; } private boolean isDelimiter(char c) { if (DELIMITERS == null) return Character.isWhitespace(c); for (int i = 0; i < DELIMITERS.length(); i++) if (c == DELIMITERS.charAt(i)) return true; return false; } }