implement StringTokenizer

This commit is contained in:
Joel Dice 2007-08-22 21:22:16 -06:00
parent 3526fbfcb7
commit f907d9e08f

View File

@ -1,7 +1,94 @@
package java.util;
public class StringTokenizer implements Enumerator {
public class StringTokenizer implements Enumeration {
private final String in;
private String token;
private boolean includeDelimiters;
private String delimiters;
private final boolean includeDelimiters;
private int position;
public StringTokenizer(String in, String delimiters,
boolean includeDelimiters)
{
this.in = in;
this.delimiters = delimiters;
this.includeDelimiters = includeDelimiters;
}
public StringTokenizer(String in, String delimiters) {
this(in, delimiters, false);
}
public StringTokenizer(String in) {
this(in, " \t\r\n\f");
}
private boolean isDelimiter(char c) {
return delimiters.indexOf(c) >= 0;
}
public int countTokens() {
int count = 0;
boolean sawNonDelimiter = false;
for (int i = position; i < in.length(); ++i) {
if (isDelimiter(in.charAt(i))) {
if (includeDelimiters || sawNonDelimiter) {
++ count;
}
sawNonDelimiter = false;
} else {
sawNonDelimiter = true;
}
}
if (sawNonDelimiter) {
++ count;
}
return count;
}
public boolean hasMoreTokens() {
for (int i = position; i < in.length(); ++i) {
if (isDelimiter(in.charAt(i))) {
if (includeDelimiters) {
return true;
}
} else {
position = i;
return true;
}
}
return false;
}
public String nextToken() {
for (int i = position; i < in.length(); ++i) {
if (isDelimiter(in.charAt(i))) {
if (includeDelimiters) {
return in.substring(i, i + 1);
}
} else {
position = i;
while (position < in.length() && ! isDelimiter(in.charAt(i))) {
++ position;
}
return in.substring(i, position);
}
}
throw new NoSuchElementException();
}
public String nextToken(String delimiters) {
this.delimiters = delimiters;
return nextToken();
}
public boolean hasMoreElements() {
return hasMoreTokens();
}
public Object nextElement() {
return nextToken();
}
}