#java #string #stringtokenizer
#java #строка #stringtokenizer
Вопрос:
Мне нужно прочитать данные из файла, и я только что ввел некоторые образцы данных в виде строки в StringTokenizer. Я не могу понять, что не так с моим кодом здесь. Может кто-нибудь посоветовать?
import java.util.StringTokenizer;
public class rough {
public static void main(String[] args) throws Exception {
StringTokenizer itr = new StringTokenizer("PKE2324 02-12-2020 200"
"nMJD432 19-05-2019 150");
while (itr.hasMoreTokens()){
String line = itr.nextToken().toString();
String[] tokens = line.split(" ");
String[] date = tokens[1].split("-");
String yr = date[2];
String reg = tokens[0];
String regy = new String(reg " " yr);
System.out.println(regy);
}
}
}
Я хочу получить регистрационный номер и год в виде строки. Когда я запускаю это, я продолжаю получать ArrayIndexOutOfBounds
Комментарии:
1. Вы отладили и поняли, почему это так
ArrayIndexOutofBounds
? где именно вы это получаете? Можете ли вы поделиться трассировкой стека?2. @wakanada, пожалуйста, посмотрите, решает ли мой ответ ваш вариант использования.
3. Пожалуйста, укажите полную трассировку стека
Ответ №1:
Это тип ошибки времени выполнения, которая была вызвана из-за логической ошибки и несоответствующего разграничения.
Предполагая, что вы хотите обозначить большую строку с помощью символа новой строки, используйте, n
в качестве разделителя для StringTokenizer .
Посмотрите на исправленный код ниже, который удовлетворяет вашему варианту использования:
import java.util.StringTokenizer;
public class rough {
public static void main(String[] args) throws Exception {
StringTokenizer itr = new StringTokenizer("PKE2324 02-12-2020 200"
"nMJD432 19-05-2019 150", "n");
while (itr.hasMoreTokens()){
String line = itr.nextToken().toString();
String[] tokens = line.split(" ");
String[] date = tokens[1].split("-");
String yr = date[2];
String reg = tokens[0];
String regy = new String(reg " " yr);
System.out.println(regy);
}
}
}
Вывод:
PKE2324 2020
MJD432 2019
Комментарии:
1. На самом деле я искал что-то еще, и ваш ответ дал представление о том, как это получить. Спасибо. Я мог бы заставить его работать без ограничения. Новое в использовании stringtokenizer.
Ответ №2:
Исключение, вызванное этой строкой
String[] tokens = line.split(" ");
String[] date = tokens[1].split("-");
строка = PKE2324, поэтому токены [] = { «PKE2324»} —> длина = 1
токены [1] —> Исключение ArrayIndexOutOfBoundException
Чтобы исправить это:
StringTokenizer itr = new StringTokenizer("PKE2324 02-12-2020 200"
"nMJD432 19-05-2019 150");
По умолчанию используется разделитель пробелов.
Вы должны передать delimeter в конструкторе, если вам нужен другой delimeter.