从Java读取文件时出现奇怪的行为

时间:2016-12-16 09:46:35

标签: java matrix

从文件中读取时遇到一些问题。我试图从文本文件中读取并将字符读取和写入矩阵。问题是我得到了一个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];

中抛出IndexOutOfBounds

我的输入如下:

%,%,%,%,%,%,%,%,%,%,% %,C, , , ,C, , ,C, ,% %,%,%, , , ,%,%,%,%,% %,C, , , ,C, , , , ,% %, , , , , , , , , ,% %, , , , , , , , , ,% %, , , , , , , , , ,% %, , , , , , , , , ,% %, , , , , , , , , ,% %, , , , , , , , , ,% %,%,%,%,%,%,%,%,%,%,%

我也尝试将其更改为:

 char[][] maze = new char[tam.length+1][tam.length+1];

现在它有效,但我不知道为什么。有什么想法吗?

PD:当我打印矩阵时,我看到了一些奇怪的东西。看起来它在我的矩阵的右侧打印了一些空白字符,但在我的输入文件中我没有写任何空白字符:(

my matrix in java

有什么想法吗?

1 个答案:

答案 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);

这仍然可以改进,但你可能会有所了解。