gpt4 book ai didi

java - 为什么在while循环和for循环中使用StringTokenizer时会给出不同的输出

转载 作者:行者123 更新时间:2023-12-01 11:47:40 25 4
gpt4 key购买 nike

我使用StringTokenizer来获取字符串的标记。但是,当我尝试使用for循环和while循环打印StringTokenizer中的所有标记时,会得到两个不同的输出。

String string="She is an attractive girl, isn't she?";
StringTokenizer stringTokenizer=new StringTokenizer(string,",");

当我尝试使用for循环打印所有 token 时
for (int i=0;i<stringTokenizer.countTokens();i++)
System.out.println(stringTokenizer.nextToken());

输出

她是一个迷人的女孩

尝试使用while循环打印所有 token 时,使用
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<1false,您的 for循环将终止,而不会读取第二个条目。

您可以先将标记的数量保存在变量中,然后在 for循环中使用它。
int count = stringTokenizer.countTokens();
for (int i=0; i<count; i++) {
System.out.println(stringTokenizer.nextToken());
}

这样, countTokens()方法仅被调用一次(具有正确的值),而不会在每次 nextToken()调用后被调用,且剩余 token 计数减少。

关于java - 为什么在while循环和for循环中使用StringTokenizer时会给出不同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60874891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com