无法使用StringTokenizer

时间:2018-08-21 21:35:28

标签: java

我正在尝试使用StringTokenizer用“,”分割字符串,但无法获取整个值,令牌计数显示3,但仅打印两个元素,我在下面添加了代码 如果我尝试了另外两个输入 “ Ravi,Tuti,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());}
}
}

输出为

3
Ravi
Tuti

3 个答案:

答案 0 :(得分:1)

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());
     }

   }
}

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

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

int numTokens = stk.countTokens();
for (int i = 0; i < numTokens; i++) {
  System.out.println(stk.nextToken());
}

答案 1 :(得分:1)

您应该使用hasTokens()方法。

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

答案 2 :(得分:1)

countTokens()方法返回:

  

使用当前定界符集保留在字符串中的令牌数量。

因此,在您的if循环中,它不断求值并返回较小的数字。为了防止这种情况,您可以将其解析为变量

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

如果您不希望引入其他变量,则可以在i返回的位置开始countTokens(),然后循环直到i大于零(同时从i中减去)而不是添加)

for(int i=stk.countTokens();i>0;i--){
    System.out.println(stk.nextToken());
}

输出:

3
Ravi
Tuti
786