从文件中读取时遇到一些问题。我试图从文本文件中读取并将字符读取和写入矩阵。问题是我得到了一个IndexOutOfBounds异常,我不知道为什么会这样。
这是我的代码:
public static char[][] readTxt(String args[]) {
String file = args[0];
try {
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line = br.readLine();
//counter
int counter = 0;
String[] tam = line.split(",");
char[][] maze = new char[tam.length][tam.length];
while (line != null) {
String[] values = line.split(",");
for (int i = 0; i < values.length; i++) {
maze[counter][i] = values[i].charAt(0);
}
counter++;
line = br.readLine();
}
br.close();
return maze;
} catch (Exception e) {
System.out.println("Exception reading file " + file + ": " + e);
}
return null;
}
它会在char[][] maze = new char[tam.length][tam.length];
我的输入如下:
%,%,%,%,%,%,%,%,%,%,%
%,C, , , ,C, , ,C, ,%
%,%,%, , , ,%,%,%,%,%
%,C, , , ,C, , , , ,%
%, , , , , , , , , ,%
%, , , , , , , , , ,%
%, , , , , , , , , ,%
%, , , , , , , , , ,%
%, , , , , , , , , ,%
%, , , , , , , , , ,%
%,%,%,%,%,%,%,%,%,%,%
我也尝试将其更改为:
char[][] maze = new char[tam.length+1][tam.length+1];
现在它有效,但我不知道为什么。有什么想法吗?
PD:当我打印矩阵时,我看到了一些奇怪的东西。看起来它在我的矩阵的右侧打印了一些空白字符,但在我的输入文件中我没有写任何空白字符:(有什么想法吗?
答案 0 :(得分:1)
您的假设是,您总是拥有与一行中的条目一样多的行吗?
我不会把呼叫放到readLine
这么远的地方。您是否知道您可以使用流和nio.Files编写类似的内容?
您的代码有些不同,无需检查计数器:
Character[][] maze = Files.lines(Paths.get(stringPathOrUri))
.map(s -> s.split(","))
.map(strings -> Stream.of(strings)
.map(s -> s.charAt(0)) // better: insert your transformation function here
.toArray(Character[]::new))
.toArray(Character[][]::new);
这仍然可以改进,但你可能会有所了解。