/**
* 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;
}
}