diff --git a/classpath/java/util/StringTokenizer.java b/classpath/java/util/StringTokenizer.java index 1a0faa2eee..aa9f31fa37 100644 --- a/classpath/java/util/StringTokenizer.java +++ b/classpath/java/util/StringTokenizer.java @@ -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(); + } + }