Использование строкового токенизатора для установки создания массивов из текстового файла? - PullRequest
3 голосов
/ 01 февраля 2010

Эй. Возможно, вы недавно видели сообщение, которое я искал, но раньше я делал это неправильно, поэтому я собираюсь начать все сначала и начать с основ.

Я пытаюсь прочитать текстовый файл, который выглядит следующим образом:

FTFFFTTFFTFT
3054 FTFFFTTFFTFT
4674 FTFTFFTTTFTF
... и т. д.

Что мне нужно сделать, это поместить первую строку в строку в качестве ключа ответа.

Далее мне нужно создать массив с идентификатором студента (первые цифры). Затем мне нужно создать массив, параллельный идентификатору студента, который содержит ответы студента.

Ниже приведен мой код, и я не могу понять, как заставить его работать таким образом, и мне было интересно, может ли кто-нибудь помочь мне с этим.

public static String[] getData() throws IOException {
      int[] studentID = new int[50];
      String[] studentAnswers = new String[50];
      int total = 0;

      String line = reader.readLine();
      strTkn = new StringTokenizer(line);
      String answerKey = strTkn.nextToken();

      while(line != null) {
        studentID[total] = Integer.parseInt(strTkn.nextToken());
        studentAnswers[total] = strTkn.nextToken();
        total++;
      }
    return studentAnswers;
    }

Итак, в конце дня структура массива должна выглядеть следующим образом:

studentID [0] = 3054
studentID [1] = 4674
... и т. д.

studentAnswers [0] = FTFFFTTFFTFT
studentAnswers [1] = FTFTFFTTTFTF

Спасибо:)

Ответы [ 2 ]

2 голосов
/ 01 февраля 2010

Возможно, вы захотите подумать о ...

  • с использованием класса Scanner для токенизации ввода
  • использование типов коллекций (таких как ArrayList) вместо необработанных массивов - массивы используются, но они не очень гибки; ArrayList имеет динамическую длину
  • создание класса для инкапсуляции идентификатора учащегося и его ответов - это объединяет информацию и избавляет от необходимости синхронизировать два массива

Scanner input = new Scanner(new File("scan.txt"), "UTF-8");
List<AnswerRecord> test = new ArrayList<AnswerRecord>();
String answerKey = input.next();
while (input.hasNext()) {
  int id = input.nextInt();
  String answers = input.next();
  test.add(new AnswerRecord(id, answers));
}
2 голосов
/ 01 февраля 2010

Если вы правильно открыли файл для чтения (потому что я не вижу, как инициализируется переменная reader или тип читателя), и содержимое файла правильно сформировано (в соответствии с тем, что вы ожидаете), Вы должны сделать следующее:

  String line = reader.readLine();
  String answerKey = line;
  StringTokenizer tokens;
  while((line = reader.readLine()) != null) {
    tokens = new StringTokenizer(line);
    studentID[total] = Integer.parseInt(tokens.nextToken());
    studentAnswers[total] = tokens.nextToken();
    total++;
  }

Конечно, было бы лучше, если бы вы добавили несколько проверок, чтобы избежать ошибок во время выполнения (если содержимое файла неверно), например, предложение try-catch вокруг Integer.parseInt () (может вызвать исключение NumberFormatException).

РЕДАКТИРОВАТЬ: я просто заметил в вашем заголовке, что вы хотите использовать StringTokenizer, поэтому я отредактировал свой код (заменил метод split на StringTokenizer).

...