Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用StringTokenizer获取所有令牌元素_Java - Fatal编程技术网

Java 无法使用StringTokenizer获取所有令牌元素

Java 无法使用StringTokenizer获取所有令牌元素,java,Java,我正在尝试通过“,”拆分字符串,使用StringTokenizer,但无法获得整个值,token count显示为3,但仅打印两个元素,我在下面添加了代码 如果我尝试了其他两个输入 “拉维,图蒂,786”-输出相同 “Ravi,Tuti,786,pincode”获得三个代币而不是最后一个 public class Tokenizer{ public static void main(String[] args){ String str = "Ravi,Tuti,786";//survival o

我正在尝试通过“,”拆分字符串,使用StringTokenizer,但无法获得整个值,token count显示为3,但仅打印两个元素,我在下面添加了代码 如果我尝试了其他两个输入 “拉维,图蒂,786”-输出相同 “Ravi,Tuti,786,pincode”获得三个代币而不是最后一个

public class Tokenizer{
public static void main(String[] args){
String str = "Ravi,Tuti,786";//survival of fittest,journey to get job,update skill,try,get job";
        StringTokenizer stk = new StringTokenizer(str,",");
        System.out.println(stk.countTokens());
        for(int i=0;i<=stk.countTokens();i++){
        System.out.println(stk.nextToken());}
}
}
hasMoreTokens()
nextToken
一起使用:

public class Tokenizer{
    public static void main(String[] args){
    String str = "Ravi,Tuti,786";//survival of fittest,journey to get job,update skill,try,get job";
     StringTokenizer stk = new StringTokenizer(str,",");
     System.out.println(stk.countTokens());

     while (stk.hasMoreTokens()) {
        System.out.println(stk.nextToken());
     }

   }
}

您的方法的问题是,您正在
for
循环中运行
countTokens
,调用
nextToken
后会发生变化

如果要对循环使用
,则需要将令牌计数保存到变量中:

int numTokens = stk.countTokens();
for (int i = 0; i < numTokens; i++) {
  System.out.println(stk.nextToken());
}
int numTokens=stk.countTokens();
for(int i=0;i
您应该使用
hasTokens()
方法

for( ; stk.hasMoreTokens() ; ) {
    System.out.println(stk.nextToken());
}
countTokens()
方法返回:

使用当前分隔符集的字符串中剩余的令牌数

因此,在
if
循环中,它会不断计算并返回较小的数字。要防止出现这种情况,可以将其解析为变量

int length = stk.countTokens();
for(int i=0;i<length;i++){
    System.out.println(stk.nextToken());
}
输出:

3
Ravi
Tuti
786

您好,是的,它工作正常,但您能告诉我我在循环中做错了什么,直到它得到三个正确的令牌…?查看我关于将令牌计数保存到变量的更新答案。感谢您的时间,让我了解新事物snr bro
for(int i=stk.countTokens();i>0;i--){
    System.out.println(stk.nextToken());
}
3
Ravi
Tuti
786