日期:2014-05-20  浏览次数:20617 次

关于StringTokenizer的一个小问题
import java.util.StringTokenizer;
public class StrTokenizerTest {
public static void main(String[] args) {
StringTokenizer fenxi = new StringTokenizer("a ooo@sina.com","@");
int n = fenxi.countTokens();
System.out.println(n);
}
}
对于这种情况"@"不加空格得到的是2
如果加上空格StringTokenizer fenxi = new StringTokenizer("a ooo@sina.com"," @");
得到的结果就是3
想知道StringTokenizer的这个对于CountTokens的返回值是可以理解被分隔符分了多少份的吧?
还有就是对于加不加空格的这个问题。

------解决方案--------------------
引用:
"后面那个" @"表示的是分隔符,就是以空格和@将字符串分隔成一个个的Token”

你说的意思是这样的StringTokenizer fenxi = new StringTokenizer("aooo @sina.com"," @");
这样得到的是2,这个肯定没有问题,就是正常理解

可是StringTokenizer fenxi = new StringTokenizer("ao ……

引号里面每个字符都是分隔符,不是说他俩在一起才是分隔符。
------解决方案--------------------
想知道StringTokenizer的这个对于CountTokens的返回值是可以理解被分隔符分了多少份的吧?
是的

还有就是对于加不加空格的这个问题。 
给定的分隔符字符串中(第二个参数),每一个字符都是一个分隔符,而不是整个字符串是一个分隔符。所以加空格后,就表示当前有两个分隔符,空格和@。
------解决方案--------------------
StringTokenizer fenxi = new StringTokenizer("a ooo@sina.com"," @");
这种情况下的分隔符就是" "和"@",解析的结果为:a、ooo、sina.com
 而  StringTokenizer fenxi = new StringTokenizer("a ooo@sina.com","@");
这种情况下的分隔符就只有"@",解析的结果为:a ooo和sina.com

StringTokenizer的构造函数有以下三种:
 public StringTokenizer(String str):构造一个用来解析str的StringTokenizer对象。java默认的分隔符是“空格”、“制表符(‘\t’)”、“换行符(‘\n’)”、“回车符(‘\r’)”
 public StringTokenizer(String str, String delim):构造一个用来解析str的StringTokenizer对象,并提供一个指定的分隔符。
 public StringTokenizer(String str, String delim, boolean returnDelims):构造一个用来解析str的StringTokenizer对象,并提供一个指定的分隔符,同时,指定是否返回分隔符。
 
 第一个参数就是要分隔的String,第二个是分隔字符集合,第三个参数表示分隔符号是否作为标记返回,如果不指定分隔字符,默认的是:”\t\n\r\f”;
fenxi.countTokens();返回nextToken方法被调用的次数。如果采用构造函数1和2,返回的就是分隔符数量,采用有三个参数的构造函数就要加上分隔符本身如:
package com.shine.test;

import java.util.StringTokenizer;

public class StrTokenizerTest {
public static void main(String[] args) {
StringTokenizer fenxi = new StringTokenizer("a ooo@sina.com", " @",true);
int n = fenxi.countTokens();
System.out.println(n);
 while (fenxi.hasMoreTokens()) {
         System.out.println(fenxi.nextToken());
     }

}
}
结果为:
5
a
 
ooo
@
sina.com