Java 在for条件中使用StringTokenizer.countTokens()

Java 在for条件中使用StringTokenizer.countTokens(),java,Java,代码1: 代码2: 5 0 as 1 df 2 gg 3 hj 4 kl 为什么第二个代码会得到部分输出 这是因为nextToken()方法在每次迭代中提升了位置吗 是的,您是正确的,()不是一个常量值,而是返回在生成前可以调用此标记器的nextToken方法的次数 例外。 引述: 计算此标记器的nextToken方法在生成异常之前可以被调用的次数。当前位置不高级 因此,每次调用s1.nextToken()s1.countTokens()返回另一个值时,(变得越来越短),

代码1:

代码2:

5
0   as
1   df
2   gg
3   hj
4   kl
  • 为什么第二个代码会得到部分输出
  • 这是因为
    nextToken()
    方法在每次迭代中提升了位置吗
是的,您是正确的,()不是一个常量值,而是返回在生成前可以调用此标记器的nextToken方法的次数 例外。 引述:

计算此标记器的nextToken方法在生成异常之前可以被调用的次数。当前位置不高级

因此,每次调用
s1.nextToken()
s1.countTokens()返回另一个值时,(变得越来越短),都有两个值交叉(for循环中的int i和
countTokens
),这出乎意料地将您带出for循环

是的,您是正确的,()不是一个常量值,而是返回此标记器的nextToken方法在生成之前可以被调用的次数 例外。 引述:

计算此标记器的nextToken方法在生成异常之前可以被调用的次数。当前位置不高级


因此,每次在返回另一个值时调用
s1.nextToken()
s1.countTokens()(越来越短),都会有两个值交叉(for循环中的int i和
countTokens
)这出乎意料地将您带出for循环

不要在for循环中始终评估相同的结果。所以在for循环之前,您可以引入新的变量call count并分配s1.countTokens();并使用count变量代替s1.countTokens()

不要在for循环中始终评估相同的结果。所以在for循环之前,您可以引入新的变量call count并分配s1.countTokens();并使用count变量代替s1.countTokens()

我同意你的观点。。但是我仍然猜不出为什么我会得到代码2的部分输出。我更新了答案,i在增加,s1.countTokens在变小,所以在某个点上,条件iI同意你的观点。。但是我仍然猜不出为什么我会得到代码2的部分输出。我更新了答案,i在增加,s1.countTokens在变小,所以在某个点上,条件i
5
0   as
1   df
2   gg
3   hj
4   kl
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());
        }
    }
}
5
0   as
1   df
2   gg