为什么 StringTokenizer 在 while 循环和 for 循环中使用时给出不同的输出
Why is StringTokenizer giving different outputs when used in a while loop and a for loop
我使用 StringTokenizer
来获取字符串的标记。但是当我尝试使用 for 循环和 while 循环打印 StringTokenizer
中的所有标记时,我得到了两个不同的输出。
String string="She is an attractive girl, isn't she?";
StringTokenizer stringTokenizer=new StringTokenizer(string,",");
当我尝试使用 for 循环打印所有标记时
for (int i=0;i<stringTokenizer.countTokens();i++)
System.out.println(stringTokenizer.nextToken());
输出
她是个很有魅力的女孩
当我尝试使用 while 循环打印所有标记时
while (stringTokenizer.hasMoreElements())
System.out.println(stringTokenizer.nextToken());
输出
她是个很有魅力的女孩
不是吗?
我想知道为什么 while 循环给出了预期的两个标记而 for 循环没有给出这两个标记。
countTokens()
值在您调用 nextToken()
时递减。在第一个 运行 countTokens()
中,找到的两个条目返回 2
。当您第一次调用 nextToken()
时,此数字会减少到 1
,因为只剩下一个条目可供阅读。但这意味着 for
循环将导致
for (int i=0; i<1; i++)
并且 for
循环变量 i
已经处于值 1
。因此,由于 1<1
是 false
,您的 for
循环在未读取第二个条目的情况下终止。
您可以先将标记的计数保存在一个变量中,然后在您的 for
循环中使用它。
int count = stringTokenizer.countTokens();
for (int i=0; i<count; i++) {
System.out.println(stringTokenizer.nextToken());
}
这样,countTokens()
方法只被调用一次(使用正确的值),而不是在每次 nextToken()
调用之后,剩余令牌计数减少。
我使用 StringTokenizer
来获取字符串的标记。但是当我尝试使用 for 循环和 while 循环打印 StringTokenizer
中的所有标记时,我得到了两个不同的输出。
String string="She is an attractive girl, isn't she?";
StringTokenizer stringTokenizer=new StringTokenizer(string,",");
当我尝试使用 for 循环打印所有标记时
for (int i=0;i<stringTokenizer.countTokens();i++)
System.out.println(stringTokenizer.nextToken());
输出
她是个很有魅力的女孩
当我尝试使用 while 循环打印所有标记时
while (stringTokenizer.hasMoreElements())
System.out.println(stringTokenizer.nextToken());
输出
她是个很有魅力的女孩
不是吗?
我想知道为什么 while 循环给出了预期的两个标记而 for 循环没有给出这两个标记。
countTokens()
值在您调用 nextToken()
时递减。在第一个 运行 countTokens()
中,找到的两个条目返回 2
。当您第一次调用 nextToken()
时,此数字会减少到 1
,因为只剩下一个条目可供阅读。但这意味着 for
循环将导致
for (int i=0; i<1; i++)
并且 for
循环变量 i
已经处于值 1
。因此,由于 1<1
是 false
,您的 for
循环在未读取第二个条目的情况下终止。
您可以先将标记的计数保存在一个变量中,然后在您的 for
循环中使用它。
int count = stringTokenizer.countTokens();
for (int i=0; i<count; i++) {
System.out.println(stringTokenizer.nextToken());
}
这样,countTokens()
方法只被调用一次(使用正确的值),而不是在每次 nextToken()
调用之后,剩余令牌计数减少。