代码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/