关于用StringTokenizer类的一个循环出现的小问题

heshang110 2008-03-27 09:05:01
[java]
import java.io.*;
import java.util.*;

public class stopList
{
public static void main(String[] args)throws IOException{

BufferedReader datas = new BufferedReader(new FileReader("trimed.txt"));

String line;

while((line=datas.readLine())!=null){

List<String> lcWords = new ArrayList<String>();

StringTokenizer tokens = new StringTokenizer(line);



for(int i=0; i<tokens.countTokens(); i++){
//为什么只能读入一半的数据???

lcWords.add(tokens.nextToken());
}//end for;

System.out.println(lcWords);

}//end while;
}
}
[/java]



其中在从文件中读入数据的时候,我发现for(int i=0; i<tokens.countTokens(); i++)循环中,lcWords只能读入的恰好是每行的一半数据,也就是说当我文件中的一行数据为1 2 3 4时,lcWords中为1 2。这是为什么呢?我跟踪line,发现它读入的是全部的数据。当我把for循环换成while(tokens.hasMoreTokens())的时候,问题就没有了。所以肯定还是循环上有问题了。但是我不清楚是哪里出问题了。请各位指点一下,谢谢!
...全文
111 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tobenq 2008-03-27
  • 打赏
  • 举报
回复
tokens.countTokens()值会随着tokens.nextToken()的调用而减小。
你可以用hasMoreTokens()来判断是否还有值,或者在循环之前将tokens.countTokens()保存到变量内,然后以这个变量为循环边界就没问题了。
LuffySY 2008-03-27
  • 打赏
  • 举报
回复
想法简单了 还是hasMore()实用
LuffySY 2008-03-27
  • 打赏
  • 举报
回复
lbt你在机房挂机 还在这边水..
nihuajie05 2008-03-27
  • 打赏
  • 举报
回复
在java中判断是否结束最好用has...()或hasMore...()函数,它们会直接返回bool值,而且不会因此产生人为的错误
同LS
hawkeyes0 2008-03-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fcsx2005 的回复:]
因为调用nextToken()方法之后countTokens()的值会发生变化,例子如下:
Java codepublicstaticvoidmain(String arg[]) {
String a="1 2 3 4";
java.util.StringTokenizer st=newjava.util.StringTokenizer(a);for(inti=0;i<st.countTokens();i++){
System.out.println(st.countTokens()+"before");
System.out.println(st.nextToken());
System.out.println(st.countToken…
[/Quote]

在java中判断是否结束最好用has...()或hasMore...()函数,它们会直接返回bool值,而且不会因此产生人为的错误
fcsx2005 2008-03-27
  • 打赏
  • 举报
回复
因为调用nextToken()方法之后countTokens()的值会发生变化,例子如下:
    public static void main(String arg[]) {
String a = "1 2 3 4";
java.util.StringTokenizer st = new java.util.StringTokenizer(a);
for(int i =0;i<st.countTokens();i++){
System.out.println(st.countTokens()+" before");
System.out.println(st.nextToken());
System.out.println(st.countTokens()+" after");
}
}
heshang110 2008-03-27
  • 打赏
  • 举报
回复
不好意思,我是初学者,您的答复我还是没有看懂,您能结合我这个例子,具体讲解一下么?谢谢
吴冬冬 2008-03-27
  • 打赏
  • 举报
回复
hasMoreTokens()
测试该 tokenizer 的字符串是否还有其它可用的标记。
countTokens()
计算在生成异常之前,可调用该 tokenizer 的 nextToken 方法的次数。

heshang110 2008-03-27
  • 打赏
  • 举报
回复
谢谢几位的帮助,我明白了,非常感谢!

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧