Я студент-программист на первом курсе, так что простите меня, если это глупый вопрос.Как создать несколько массивов из одной текстовой строки?
То, что я пытаюсь сделать, это прочитать текстовый файл, содержащий ключ ответа в строке 1, а исходящие строки будут содержать идентификационный номер студента и их ответы на тест. Вот пример:
TFFTFFTTTTFFTFTFTFTT
ABC54301 TFTFTFTTTTF TFTFTFTT
ABC54302 TFFTFFFFFFFFTFTFTFTT
ABC54303 TFFTFFTTTTFFTFTTTTTT
ABC54304 TFFTTTFFTTFFTFTFTFTT
ABC54305 TFTFTFTTTTFFTFTFTFTT
Моя идея заключается в том, чтобы создать три массива - тот, который содержит только ключ ответа, один, содержащий идентификационные номера учащихся, а тот, который содержит studentss ответы. Идентификатор студента всегда 8 цифр, но может содержать пробелы. Ответы учащегося всегда 20 символов, но также могут содержать пробелы. Поэтому я не могу разбить их на основе пробелов.
инструкции, содержащиеся в этом:
while (inFile.hasNext())
{
...
}
where 'inFile' is the Scanner object connected to the input file.
Each student's record should be read by two read's --
one string (for ID) and another string (answer string).
Я довольно потерял. Моя первоначальная идея состоит в том, чтобы прокрутить каждую строку за первой и установить каждый сегмент строки в ее бесплатный массив. Проблема, которую я достигаю, заключается в том, что я не могу найти какую-либо инструкцию или пояснения относительно того, как я разделил бы строки на основе количества символов.
Я думал, может быть что-то вроде:
while (inFile.hasNext())
{
// I would somehow set the first line to its own array
// As the loop continues, as long as its not the first line
idNums[i] = //Characters 1-8
studentAnswers[i] = //Characters 10-30
}
ли что разумно? Или есть более простой способ? Я чувствую, что приближаюсь к этому более сложным образом, чем это необходимо.
EDIT:
После получения дополнительной информации о картах и регулярных выражениях, я попытался несколько различных версий этого кода. Первый состоял из:
while (scan.hasNextLine()) {
String[] studentInfo = scan.nextLine().split(" ", 2);
info.put(studentInfo[0], studentInfo[1]);
}
Какой вид работал, но проблема в том, что, если она закончилась с пробелами, это не спасло бы полные 20 символов. Это проблема? Я не уверен. В настоящее время я тестирую это:
String[] answerKey = scan.nextLine().split("");
Map<String, String[]> results = new HashMap<>();
while (scan.hasNextLine()) {
String line = scan.nextLine();
results.put(line.substring(0, 8), line.substring(9).split(""));
}
Это дает мне правильные ключи, но неправильные значения. Значения, как представляется, указывают на ячейки памяти. Например:
{ABC54339=[Ljava.lang.String;@55f96302
Спасибо Я не узнал о картах еще - но услышав, что от нескольких пользователей здесь, то это будет, как я подойти к этой проблеме вы не возражаете, обеспечивая маленький кусочек. скелетного кода или псевдокода дать пример того, как карта будет работать в этом случае? Я использую Java 8. – ccsum
Я думаю, что делаю простую ошибку, но я не вижу, что это такое. Я изучал карты и регулярное выражение в течение последних двух часов - возможно, я слишком долго смотрел на это, или, может быть, я просто делаю что-то неправильно. Обновит исходное сообщение новым кодом. Я попробовал это в комментариях, и это не сработает - упс! – ccsum
с java 8 вы можете просто использовать пустое регулярное выражение '' '' для разделения каждого символа - пока еще не изучайте регулярное выражение (оно будет жарить ваш мозг). Игнорируйте код java 8 - это было просто интересно. Попробуйте простой цикл - он должен работать. После того, как цикл напечатает карту, проверьте, не работает ли она. Затем вы можете выполнить итерацию по карте, итерации по 'map.entrySet()' – Bohemian