A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 田向向 高级黑马   /  2012-6-25 01:09  /  2859 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 田向向 于 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
这是什么情况?

2 个回复

倒序浏览
文档上写的很清楚
public String nextToken()返回此 string tokenizer 的下一个标记。
返回:
     此 string tokenizer 的下一个标记。
抛出:
     NoSuchElementException - 如果此 tokenizer 的字符串中没有更多标记。


很明显,原因是当你取出过一次以后,指针已经指向了字符串的末尾。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
虽然说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包里的东西了那么应该是学过集合了吧,你必须得判断它有元素你才能取出下一个元素。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马