代码1:

import java.util.StringTokenizer;
class Test {

    public static void main(String args[]) {
        StringTokenizer s1 = new StringTokenizer("as df gg hj kl");
        System.out.println(s1.countTokens());
        int a = s1.countTokens();
        for(int i = 0; i < a; i++){
            System.out.print(i + "\t");
            System.out.println(s1.nextToken());
        }
    }
}


代码1的输出:

5
0   as
1   df
2   gg
3   hj
4   kl


代码2:

import java.util.StringTokenizer;
class Test {
    public static void main(String args[]) {
        StringTokenizer s1 = new StringTokenizer("as df gg hj kl");
        System.out.println(s1.countTokens());
        for(int i = 0; i < s1.countTokens(); i++){
            System.out.print(i + "\t");
            System.out.println(s1.nextToken());
        }
    }
}


代码2的输出:

5
0   as
1   df
2   gg



为什么在第二个代码中我得到部分输出?
是否由于nextToken()方法在每次迭代中都提高了位置?

最佳答案

是的,您是对的,StringTokenizer.countTokens()不是常数值,而是返回该令牌生成器的nextToken方法在生成之前可以被调用的次数。
一个例外。
引用:


  计算此令牌生成器的nextToken方法在生成异常之前可以被调用的次数。当前位置未提前。


因此,每次调用s1.nextToken() s1.countTokens()返回另一个值(越来越短)时,两个值都被交叉,(int i在for循环和countTokens中)会意外地使您失望for循环

关于java - 在条件中使用StringTokenizer.countTokens(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36679880/

10-12 04:39