2010-01-31 6 views
3

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

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

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
[1] studentAnswers = FTFTFFTTTFTF

Благодаря :)

ответ

2

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

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

EDIT: Я просто заметил в вашем заголовке, что вы хотите использовать StringTokenizer, поэтому я отредактировал свой код (заменил метод split на StringTokenizer).

2

Вы можете думать о ...

  • используя Scanner класс для tokenizing вход
  • используя типы коллекций (например, 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)); 
} 
Смежные вопросы