StringTokenizer的用法详解

StringTokenizer类:根据自定义字符为分界符进行拆分,并将结果进行封装提供对应方法进行遍历取值,StringTokenizer 方法不区分标识符、数和带引号的字符串,它们也不识别并跳过注释;该方法用途类似于split方法,只是对结果进行了封装;

StringTokenizer的三个构造方法:

1.StringTokenizer(String str) :被分割对象str,分隔符采取默认分割,Java默认的分隔符是“空格”、“制表符(‘\t’)”、“换行符(‘\n’)”、“回车符(‘\r’)”。默认的话,所有的分隔符都会同时起作用。
源码:
public StringTokenizer(String str) {
this(str, ” \t\n\r\f”, false);
}

实例:

[java]  view plain  copy
 print ?
  1. public static void main(String[] args) {  
  2.  StringTokenizer st = new StringTokenizer("www ooobj com");  
  3.  while(st.hasMoreElements()){  
  4.  System.out.println("Token:" + st.nextToken());  
  5.  }  
  6.  }  

输出:
Token:www
Token:ooobj
Token:com

2.StringTokenizer(String str, String delim):分隔符不采用默认,提供一个指定的分隔符。

3.StringTokenizer(String str, String delim, boolean returnDelims):指定一个特定的分隔符,同时,指定是否返回分隔符。如果是true,分隔符将被作为一个token返回。

实例:

 public static void main(String[] args) {  

  StringTokenizer st = new StringTokenizer("www.ooobj.com", ".", true);  

  while(st.hasMoreElements()){  

  System.out.println("Token:" + st.nextToken());  

  }  

  } 
输出:
Token:www
Token:.
Token:ooobj
Token:.
Token:com

方法有6个:(所有的方法都是public型)    ·

int countTokens()  

   对于这个方法API的描述是这样的:Calculates the number of times that this tokenizer'snextToken method can be called before it generates an exception. The current position is not advanced. 

  它说计算nextToken方法在抛异常以前还能被调用的次数,当前索引不增加。

 其实就是说还有几个元素可以被遍历。返回的是 当前可以被访问的元素的个数。


方法1:用来判断当前还有没有可以遍历的元素

   boolean hasMoreTokens(); //判断字符串中是含还有token 

   boolean hasMoreElements();

方法2:用来获得当前的元素token,一个返回String类型,一个返回Object类型

   Object nextElement();//除返回结果类型外,其返回与 nextToken 方法相同的值

   String nextToken();//StringTokenizer对象中的下一个token。 

方法3:

 String nextToken(String delim)

 返回当前索引开始,指定分隔符的下一个token。实际返回的是索引当前位置到下一个delim出现为止所有的字符,见例子。

 无法想想出这个方法在什么情况下使用。


StringTokenizer test = new StringTokenizer("J-PHONE,Vodafone,SoftBank",",");

while(test.hasMoreTokens()){
System.out.println("count0="+test.countTokens());
System.out.println("carry"+test.nextToken());
System.out.println("count1="+test.countTokens());
//System.out.println("  " + test.nextToken("*"));
}

输出结果:

count0=3
carryJ-PHONE
count1=2
count0=2
carryVodafone
count1=1
count0=1
carrySoftBank
count1=0


如果代码换成element:

while(test.hasMoreElements()){
System.out.println("count0="+test.countTokens());
System.out.println("obj" + test.nextElement());
System.out.println("count1="+test.countTokens());
}

输出的结果是一样:

count0=3
objJ-PHONE
count1=2
count0=2
objVodafone
count1=1
count0=1
objSoftBank
count1=0


但是 需要注意是nextElement()返回是对象类型,不是String类型,需要根据需要转化下


还要说一个StringTokenizer比较不好的地方,就是她的索引无法返回,一旦nextToken 就不能返回了,像上面两种写法同时存在的话,只有第一个循环能有数据输出,第二个循环是不能进去的。如果哪位大侠知道返回的方法请赐教。


语句:

System.out.println("count0="+test.countTokens());
System.out.println("obj=" + test.nextElement());
System.out.println("next=" + test.nextToken("*"));
System.out.println("count1="+test.countTokens());

输出结果:

count0=2
obj=J-PHONE
next=,Vodafone
count1=1





你可能感兴趣的:(MapReduce)