我是一年級的編程學生,所以如果這是一個愚蠢的問題,請原諒我。如何從一個文本行創建多個數組?
我想要做的是讀取一個文本文件,其中包含第1行的答案關鍵字,並且後續行將包含學生的ID號和他們對測試的答案。這裏有一個例子:
TFFTFFTTTTFFTFTFTFTT
ABC54301 TFTFTFTTTTF TFTFTFTT
ABC54302 TFFTFFFFFFFFTFTFTFTT
ABC54303 TFFTFFTTTTFFTFTTTTTT
ABC54304 TFFTTTFFTTFFTFTFTFTT
ABC54305 TFTFTFTTTTFFTFTFTFTT
我的想法是創建三個陣列 - 一個只包含了接聽鍵,一個包含學生的ID號,以及一個包含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
}
是合理的?還是有更簡單的方法?我覺得我正在以一種比必要更復雜的方式來解決這個問題。
編輯:
學習更多有關地圖和正則表達式之後,我嘗試幾個不同的版本這個代碼。第一個包括了:
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 2015-03-31 21:04:59
我想我犯了一個簡單的錯誤,但我看不到它是什麼。我在過去的幾個小時裏一直在研究地圖和正則表達式 - 也許我一直在考慮這個太久,或者我只是在做一些錯誤的事情。 將用新代碼更新原始帖子。我在評論中試了一下,它不起作用 - 哎呀! – ccsum 2015-04-01 00:16:34
與java 8你可以使用空白正則表達式'「」'分割每個字符 - 不要學習正則表達式(它會炒你的大腦)。忽略java 8代碼 - 這僅僅是爲了興趣。嘗試簡單的循環 - 它應該工作。循環後打印地圖,看看它的工作。然後你可以迭代map.entrySet()' – Bohemian 2015-04-01 00:25:37