黑马程序员技术交流社区

标题: 关于stringtokenizer类 [打印本页]

作者: 田向向    时间: 2012-6-25 01:09
标题: 关于stringtokenizer类
本帖最后由 田向向 于 2012-6-25 14:18 编辑

import java.util.StringTokenizer;
public class TXX {

public static void main(String [] args)
    {
  /*
StringTokenizer st = new StringTokenizer("this is a test");
  while (st.hasMoreTokens())
  {
   System.out.println(st.nextToken());
  }
*/
   StringTokenizer st1;
     
   String Time = "2012/06/25";
   st1 = new StringTokenizer(Time);
   System.out.println("Time1 : "+st1.nextToken());
   }
}
这么编译后是正确的,结果是 Time1 : 2012/06/25,但是,再加上一个 System.out.println("Time2 : "+st1.nextToken());后,编译却有错误
Exception in thread "main" java.util.NoSuchElementException
at java.util.StringTokenizer.nextToken(StringTokenizer.java:332)
at zifu.TXX.main(TXX.java:22)
Time1 : 2012/06/25
这是什么情况?

作者: 伊文龙    时间: 2012-6-25 01:24
文档上写的很清楚
public String nextToken()返回此 string tokenizer 的下一个标记。
返回:
     此 string tokenizer 的下一个标记。
抛出:
     NoSuchElementException - 如果此 tokenizer 的字符串中没有更多标记。


很明显,原因是当你取出过一次以后,指针已经指向了字符串的末尾。
作者: 闾丘日月    时间: 2012-6-25 01:31
虽然说lz研究的精神很好,这个类好像老毕从来没讲过,但是我看到那种过时的标记的时候就觉得楼主是不是有点太过偏执了。sun都不建议你用了。
顺便说说你这个问题,java.util.NoSuchElementException是说没有元素啦,类似于迭代器那种。
这是你所使用的构造函数的详细解释
StringTokenizer
public StringTokenizer(String str)为指定字符串构造一个 string tokenizer。tokenizer 使用默认的分隔符集合 " \t\n\r\f",即:空白字符、制表符、换行符、回车符和换页符。分隔符字符本身不作为标记。
这个构造函数是给str通过空白符来分割字符串的,你本身的time没有空白,所以分割完只有一个元素,看你写time的意思好像是想通过/来分割,那么应该这么写
st1 = new StringTokenizer(Time,"/");
然后你就可以用三次st1.nextToken()而不会出异常了。
一般的用法我想应该是类似于迭代器那种,你都用util包里的东西了那么应该是学过集合了吧,你必须得判断它有元素你才能取出下一个元素。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2