package com.gwt.ui.client;
import java.util.ArrayList;
public class StringTokenizer {
private final ArrayList<String> tokens;
/**
* A constructor for this class.
*
* @param text text to be tokenized.
* @param delimiter the delimiter character.
*/
public StringTokenizer(String text, char delimiter, boolean addDelimiter) {
tokens = analyse(text, delimiter, addDelimiter);
}
public StringTokenizer(String text, char delimiter) {
this(text, delimiter, false);
}
private ArrayList<String> analyse(String text, char delimiter, boolean addDelimiter) {
ArrayList<String> result = new ArrayList<String>();
char[] chars = text.toCharArray();
int sindex = 0;
int i;
for (i = 0; i < chars.length; i++) {
if (chars[i] == delimiter) {
// in case of a double delimiter we not have a substring
if (sindex != i) {
result.add(text.substring(sindex, i));
}
if (addDelimiter) {
result.add(String.valueOf(delimiter));
}
sindex = i + 1;
}
}
if (sindex < i) {
result.add(text.substring(sindex));
}
return result;
}
public StringTokenizer(String text, String lim) {
ArrayList<String> current = new ArrayList<String>();
current.add(text);
for (char c : lim.toCharArray()) {
ArrayList<String> result = new ArrayList<String>();
for (String item : current) {
result.addAll(analyse(item, c, true));
}
current = result;
}
tokens = current;
}
public ArrayList<String> getTokens() {
return tokens;
}
/**
* Returns the token count.
*
* @return the number of tokens
*/
public int countTokens() {
return tokens.size();
}
/**
* Returns the token at a given index.
*
* @param index index starts with 0
* @return the token at the specified index
*/
public String tokenAt(int index) {
return tokens.get(index);
}
}