StringTokeniser не считывает данные

#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.