Невозможно получить все элементы токена с помощью StringTokenizer
Я пытаюсь разделить строку на", " С помощью StringTokenizer, но не в состоянии получить целые значения, счетчик токенов показывает 3, но печатает только два элемента, я добавил свой код ниже если я пробовал с двумя другими входами "Рави, Тути, 786" - тот же вывод "Рави, Тути, 786, пинкод" получение трех жетонов не последний
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 ответа:
Использовать
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()); }
Вы должны использовать метод
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()); }
Если вы не хотите вводить другую переменную, вы можете начать
i
с того, чтоcountTokens()
возвращает, а затем замкнуть цикл до тех пор, покаi
не станет больше нуля (при вычитании изi
вместо добавление)for(int i=stk.countTokens();i>0;i--){ System.out.println(stk.nextToken()); }
Вывод:
3 Ravi Tuti 786