【问题标题】:.charAt() returning nullpointerexception.charAt() 返回空指针异常
【发布时间】:2014-03-17 16:03:55
【问题描述】:

我编写了一个小程序,其中有一个带有字符串名称的二维数组。在嵌套的 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') 它运行得非常好,但我想遍历数组中的所有元素。任何帮助将不胜感激。

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

感谢大家的帮助! ;)

【问题讨论】:

  • 您的第二个循环可能更安全地编码为:for(int j = 0; j &lt; polje[i].length; j++)。您是否也考虑过使用List&lt;List&lt;String&gt;&gt; 而不是String[][]

标签: java nullpointerexception charat


【解决方案1】:

您只初始化了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');
        }
    }
}

【讨论】:

    【解决方案2】:

    在您的示例中使用new String[2][5];。使用[5][5],您正在初始化一个具有空值的 5*5 矩阵。

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2014-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-12
        相关资源
        最近更新 更多