近日在项目中遇到一个使用StringTokenizer进行字符串分割的操作,以前按一定分隔符分割字符串都是用String[] result = string.split("分隔符"),然后遍历result得到逐个分割后的元素。既然java给我提供了现有的类,我们何不使用呢。现在把这个类的方法研究下。
首先,StringTokenizer有三个常用的构造方法:
StringTokenizer(String str) :构造一个用来解析str的StringTokenizer对象。java默认的分隔符是“空格”、“制表符(‘\t’)”、“换行符(‘\n’)”、“回车符(‘\r’)”。
StringTokenizer(String str, String delim) :构造一个用来解析str的StringTokenizer对象,并提供一个指定的分隔符。
StringTokenizer(String str, String delim, boolean returnDelims) :构造一个用来解析str的StringTokenizer对象,并提供一个指定的分隔符,同时,返回分指定的分隔符。
其次,StringTokenizer类常用的方法如下:
int countTokens():返回nextToken方法被调用的次数。或者说字符串按照分隔符分割后的元素个数。
boolean hasMoreElements():返回是否还有分隔符。
boolean hasMoreTokens():同上
String nextToken():返回从当前位置到下一个分隔符的字符串。
Object nextElement():结果同上,除非返回的是Object而不是String
String nextToken(String delim):同nextToken(),以指定的分隔符返回结果
其实我们常用的也就是上面加粗的三个方法。
现在进行测试如下:
import java.util.StringTokenizer;
public static void stringTokenTest(){
String str1 = "this is a book very good";
//默认的分隔符是“空格”、“制表符(‘\t’)”、“换行符(‘\n’)”、“回车符(‘\r’)”
StringTokenizer tokenizer = new StringTokenizer(str1);
// 遍历并输出每个标记
while (tokenizer.hasMoreTokens()) {
System.err.println("result1:" + tokenizer.nextToken());
}
String str2 = "this#is#a#book#very#good";
//指定分隔符
StringTokenizer tokenizer2 = new StringTokenizer(str2, "#");
// 遍历并输出每个标记
while (tokenizer2.hasMoreTokens()) {
System.err.println("result2:" + tokenizer2.nextToken());
}
String str3 = "this#is a#book=very=good";
//指定多个分隔符
StringTokenizer tokenizer3 = new StringTokenizer(str3, " #=");
// 遍历并输出每个标记
while (tokenizer3.hasMoreTokens()) {
System.err.println("result3:" + tokenizer3.nextToken());
}
String str4 = "this#is#a#book#very#good";
//指定单个分隔符并返回分隔符
StringTokenizer tokenizer4 = new StringTokenizer(str2, "#",true);
// 遍历并输出每个标记
while (tokenizer4.hasMoreTokens()) {
System.err.println("result4:" + tokenizer4.nextToken());
}
String str5 = "this#is a#book=very=good";
//指定多个分隔符
StringTokenizer tokenizer5 = new StringTokenizer(str3, " #=",true);
// 遍历并输出每个标记
while (tokenizer5.hasMoreTokens()) {
System.err.println("result5:" + tokenizer5.nextElement());
}
}
运行结果如下: