Выдает ошибку Exception in thread "main" java.util.NoSuchElementException
at java.base/java.util.StringTokenizer.nextToken(StringTokenizer.java:347)
. Я не могу понять проблему. Наведите пожалуйста на правильный путь
Вот мой код
package com.javarush.task.pro.task09.task0915;
import java.util.Arrays;
import java.util.StringTokenizer;
/*
StringTokenizer
*/
public class Solution {
public static void main(String[] args) {
String packagePath = "java.util.stream";
String[] tokens = getTokens(packagePath, "\\.");
System.out.println(Arrays.toString(tokens));
}
public static String[] getTokens(String query, String delimiter) {
StringTokenizer tokenizer = new StringTokenizer(query, delimiter);
String[] result = new String[6];
for (int i = 0; i < result.length; i++) {
result[i] = tokenizer.nextToken();
}
return result;
}
}
Галина
15 уровень
Помогите пожалуйста разобраться
Архивный
Комментарии (6)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
hidden #598481
16 августа 2021, 09:29
Откуда взялось число 6 и что оно означает?
Ты же не знаешь, сколько будет токенов в строке, которую передали в метод.
0
Галина
16 августа 2021, 09:39
Спасибо большое за ответ . После небольшой перестройки кода на такой
public static String[] getTokens(String query, String delimiter) {
StringTokenizer tokenizer = new StringTokenizer(query, delimiter);
String[] result = new String[6];
for (int i = 0; i < result.length; i++) {
while (tokenizer.hasMoreTokens()) {
result[i++] = tokenizer.nextToken();
}
}
return result;
}
все отлично заработало. Задача прошла валидацию.
result[i++] = tokenizer.nextToken();
вместо
result[i] = tokenizer.nextToken();
изменила просто от безисходности и не понимаю, почему это работает. Объясните мне это пожалуйста
0
Ksenia Volkova Java Developer в DXC Master
16 августа 2021, 10:31
Потому что без i++ у тебя внутри while i не увеличивается, и ты будешь записывать токен в одну и ту же ячейку.
Вопрос в том, зачем здесь for
0
Галина
16 августа 2021, 11:05
Ну чтобы брать перебирать индексы до длины массива. Это неправильно?
0
Ksenia Volkova Java Developer в DXC Master
16 августа 2021, 11:14
Если ты внутри while оставишь result[i], то у тебя цикл while переберет все токены из tokenizer, а i при этом никак не изменится - ведь это все будет происходить на одной и той же итерации цикла for. А когда начнется следующая итерация, то tokenizer.hasMoreTokens() уже будет false.
Если же ты внутри while напишешь result[i++], то у тебя цикл while сам переберет все ячейки массива, и for ему не нужен.
0
Галина
16 августа 2021, 11:25
Потрясающе. Так код упрощается конечно. Большое спасибо за объяснение
0