我正在尝试使用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
答案 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