1:作用和源码
作用是按照指定的分隔符对字符串进行分割,并提供API返回分割后的每个元素。
主要源码如下:
java.util.StringTokenizer
public class StringTokenizer implements Enumeration<Object> {
public StringTokenizer(String str) {
this(str, " \t\n\r\f", false);
}
public StringTokenizer(String str, String delim) {
this(str, delim, false);
}
// str:要分割的字符串
// delim:可能的分割字符,可指定多个,连着写即可
// returnDelim:是否需要返回分割符
public StringTokenizer(String str, String delim, boolean returnDelims) {
currentPosition = 0;
newPosition = -1;
delimsChanged = false;
this.str = str;
maxPosition = str.length();
delimiters = delim;
retDelims = returnDelims;
setMaxDelimCodePoint();
}
// 是否还有下一个元素
public boolean hasMoreTokens() {
newPosition = skipDelimiters(currentPosition);
return (newPosition < maxPosition);
}
}
// 返回下一个元素
public String nextToken() {
currentPosition = (newPosition >= 0 && !delimsChanged) ?
newPosition : skipDelimiters(currentPosition);
delimsChanged = false;
newPosition = -1;
if (currentPosition >= maxPosition)
throw new NoSuchElementException();
int start = currentPosition;
currentPosition = scanToken(currentPosition);
return str.substring(start, currentPosition);
}
2:实例
如有字符串{name=jack, age=90}
,要解析出姓名和年龄,代码如下:
public static void main(String[] args) throws Exception {
Stringmystr = "{name=jack, age=90}";
// 使用{ } = ,作为分隔符进行分割,并且不返回分割符,当然如果有特殊需求也可以选择返回
StringTokenizer stringTokenizer = new StringTokenizer(mystr, "{}=, ", false);
while (stringTokenizer.hasMoreTokens()) {
String key = stringTokenizer.nextToken();
String value = stringTokenizer.nextToken();
System.out.println("key: " + key);
System.out.println("value: " + value);
}
}
运行:
key: name
value: jack
key: age
value: 90
Process finished with exit code 0
简单修改程序,看下返回分割符的情况,修改代码如下:
public static void main(String[] args) throws Exception {
String mystr = "{name=jack, age=90}";
// 使用{ } = ,作为分隔符进行分割,并且不返回分割符,当然如果有特殊需求也可以选择返回
StringTokenizer stringTokenizer = new StringTokenizer(mystr, "{}=, ", true);
while (stringTokenizer.hasMoreTokens()) {
// 注意:前后拼接-的原因是看出空格的效果
System.out.println("-" + stringTokenizer.nextToken() + "-");
}
}
输出:
-{-
-name-
-=-
-jack-
-,-
- -
-age-
-=-
-90-
-}-
Process finished with exit code 0