我是一年级的编程学生,所以如果这是一个愚蠢的问题,请原谅我。如何从一个文本行创建多个数组?
我想要做的是读取一个文本文件,其中包含第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