.charAt()返回nullpointerexception

时间:2014-03-17 16:03:56

标签: java nullpointerexception charat

我写了一个小程序,其中我有一个带有String名称的二维数组。在嵌套的for循环中,我检查数组的每个元素中的第一个字符。如果第一个字符是'A'|| 'E'|| '我'|| 'O'|| 'U',我用FileWriter将该元素写入文件。但是,每次我尝试编译程序时,我都会得到NullPointerException。这是代码:

FileWriter fw = new FileWriter(“imena.txt”);

String polje[][] = new String[5][5];
polje[0][0] = "Janez";
polje[0][1] = "Tine";
polje[0][2] = "Miha";
polje[0][3] = "Klemen";
polje[0][4] = "Jure";

polje[1][0] = "Tone";
polje[1][1] = "Andrej";
polje[1][2] = "Janko";
polje[1][3] = "Nejc";
polje[1][4] = "Erik";

for(int i = 0; i < polje.length; i++) {
    for(int j = 0; j < polje[0].length; j++) {
        if(polje[i][j].charAt(0) == 'A') {
            fw.write(polje[i][j] + '\n');
        }
    }
}

如果我将if更改为if(polje[1][1].charAt(0) == 'A')它运行得很好,但我想迭代数组中的所有元素。任何帮助都将非常感激。

事实证明,我忘了初始化我的数组中的所有元素。我不敢相信我自己也看不到问题。 :)

感谢大家的帮助! ;)

3 个答案:

答案 0 :(得分:3)

您只是初始化为polje[1][...]。因此,当i为2(并且j为任何内容)时,polje[i][j]将为空...当您通过调用charAt(0)取消引用它时,您将获得例外。

请注意,使用List代替数组可以避免此类错误,其中大小会动态增长。你甚至可以混合两者:

List<String[]> polje = new ArrayList<>();
polje.add(new String[] { "Janez", "Tine", ... };
polje.add(new String[] { "Tone", "Andrej", ... };

for (String[] array : polje) {
    for (String item : array) {
        // This way you'll handle empty strings, too
        if (item.startsWith("A")) {
            fw.write(item + '\n');
        }
    }
}

答案 1 :(得分:2)

在示例中使用new String[2][5];。使用[5][5],您可以使用空值初始化5 * 5矩阵。

另一个解决方案可能是简单地添加一个非空条件:

polje[i][j] != null && polje[i][j].charAt(0) == 'A'

答案 2 :(得分:0)

你只是初始化polje [0]和polje [1],当你点击polje [3] [0]时会发生NPE