我是Java的新手(目前已加入我的第一个编程课程),所以我的问题的答案可能就在我面前。
我的目标是阅读文本文件,内容如下:
4563123,112211324135412
2312311,222121324135211
2312345,112211324135421
5527687,212111313124412
7867567,111111111111111
其中第一组数字是ID,第二组是一组测试答案(我有密钥)。一旦我读完答案,我就需要将它们存储在一个数组中(我假设只是一个数组,因为我的课程尚未涵盖ArrayLists
)。所有这些数据都需要存储在一个数组中,因为我需要在方法结束时返回它。
这是我到目前为止的代码:
public static String[] readFile(String filename)throws IOException{
Scanner inFile = new Scanner(filename);
String line;
String[] results = new String[101];
int i = 0;
while (inFile.hasNextLine()){
line = inFile.nextLine();
String[] incoming = line.split(",");
String wid = incoming[0];
String answer = incoming[1];
results[i] = wid;
results[i + 1] = answer;
i += 2;
}
inFile.close();
return results;
}
忽略String filename
是安全的,它是从主要传入的。
每次运行此方法时,我都会遇到ArrayOutOfBoundsException
,主要是在我尝试将incoming[1]
分配给answer
时。
我一直盯着这段代码的时间比对我有用的时间长,但似乎我无法绕过它。任何帮助将不胜感激,无论是告诉我什么是错的或我可以做些什么来改进。
答案 0 :(得分:1)
由于您使用的是Java 7,因此请使用新的Files API和try-with-resources语句;另外,避免复制空行:
final Path file = Paths.get(filename);
String line;
String[] incoming;
String[] results = new String[101];
int nrElements = 0;
try (
final BufferedReader reader = Files.newBufferedReader(path,
StandardCharsets.UTF_8);
) {
while ((line = reader.readLine()) != null) {
incoming = line.split(",");
if (incoming.length != 2)
continue;
results[nrElements++] = incoming[0];
results[nrElements++] = incoming[1];
}
}
return Arrays.copyOfRange(results, 0, nrElements);
答案 1 :(得分:0)
您的文件中有空行。或者没有任何逗号的垃圾线。因此,在访问Slitted数组之前,只需检查一下。
if(incoming != null && incoming.length >= 2){
String wid = incoming[0];
String answer = incoming[1];
// ... other dependent codes go here!
}
它可以帮助您避免异常。