Nem*_*ara 5 java stringtokenizer
我曾经StringTokenizer获取字符串的标记。但是当我尝试StringTokenizer使用 for 循环和 while 循环打印其中的所有标记时,我得到了两个不同的输出。
String string="She is an attractive girl, isn't she?";
StringTokenizer stringTokenizer=new StringTokenizer(string,",");
Run Code Online (Sandbox Code Playgroud)
当我尝试使用 for 循环打印所有令牌时
for (int i=0;i<stringTokenizer.countTokens();i++)
System.out.println(stringTokenizer.nextToken());
Run Code Online (Sandbox Code Playgroud)
输出
她是个有魅力的女孩
当我尝试使用 while 循环打印所有令牌时
while (stringTokenizer.hasMoreElements())
System.out.println(stringTokenizer.nextToken());
Run Code Online (Sandbox Code Playgroud)
输出
她是个有魅力的女孩
她不是吗?
我想知道为什么 while 循环给出了预期的两个标记,而 for 循环没有给出两个标记。
countTokens()当您调用 时,该值正在减小nextToken()。在第一次运行countTokens()中返回2找到的两个条目。当您nextToken()第一次打电话时,这个数字会减少到,1因为只有一个条目可供阅读。但这意味着for循环将导致
for (int i=0; i<1; i++)
Run Code Online (Sandbox Code Playgroud)
并且for循环变量i已经在 value 1。那么,既然1<1是false你的for循环终止不读第二个条目。
您可以先将标记数保存在变量中,然后在for循环中使用它。
int count = stringTokenizer.countTokens();
for (int i=0; i<count; i++) {
System.out.println(stringTokenizer.nextToken());
}
Run Code Online (Sandbox Code Playgroud)
这样,该countTokens()方法只会被调用一次(使用正确的值),而不是在每次nextToken()调用后随着剩余令牌计数的减少而被调用。
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |