Невозможно получить все элементы токена с помощью 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