/** * 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 MyStringTokenizer2 { private static final String DEFAULT_DELIMITERS = " \t\n\r"; private final String DELIMITERS; private final int DELIMITERS_LENGTH; private final String STRING; private final int STRING_LENGTH; 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 */ public MyStringTokenizer2(String aString, String someDelimiters) { STRING = aString; DELIMITERS = someDelimiters; DELIMITERS_LENGTH = DELIMITERS.length(); if (aString == null) STRING_LENGTH = -1; else STRING_LENGTH = aString.length(); index = 0; } /** usa i caratteri delimitatori di default pari a " \t\n\r"
            ' ' spazio
            '\t' tabulazione
            '\n' nuova riga (Line Feed)
            '\r' invio (Carriage Return)
@param aString la stringa da cui estrarre i lessemi */ public MyStringTokenizer2(String aString) { this(aString, DEFAULT_DELIMITERS); } /** 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 alcun prossimo token */ public String next() { String token = ""; if (!hasNext()) // aggiungere al codice throw new NoSuchElementException(); while (index < STRING_LENGTH && !isDelimiter(STRING.charAt(index))) { token = token + STRING.charAt(index); index++; } return token; } private boolean isDelimiter(char c) { int i = 0; boolean found = false; while (!found && i < DELIMITERS_LENGTH) { found = (c == DELIMITERS.charAt(i)); i++; } return found; } }