比较JAVA中的字符串数组

时间:2012-11-15 10:22:50

标签: java arrays nullpointerexception

我在for循环中有以下代码,以查看字符串是否等于搜索字符串:

if(Data.coord[i].equals(Data.search))

我用精确的值测试了代码,即1 = 1,其余代码工作正常。它只是不喜欢字符串比较。 consol发出了这个错误:

Exception in thread "main" java.lang.NullPointerException
at highercoursework.Search.main(Search.java:16)
at highercoursework.Main.main(Main.java:16)

由于

6 个答案:

答案 0 :(得分:2)

你的数组中有一个未填充的元素,即

Data.coord[i]

null。请注意,Data.search可以为null,但equals()方法将处理此问题。你只需要先进行杠杆检查。

答案 1 :(得分:2)

您应该将常量与参数进行比较,因为它可以是null

例如,如果Data.search是您要搜索的常量,则应执行以下操作:

if(Data.search.equals(Data.coord[i]))

在这种情况下,您最终不会尝试在null引用上调用方法,也不需要进行不必要的null检查。

答案 2 :(得分:1)

String[] coord = new String[100];

这意味着您可以为coord [0]指定一些内容,但在此之前,coord [0]为空。因此空指针异常。

你可以试试。

String data= Data.coord[i];
if(data != null && data.equals(Data.search))

答案 3 :(得分:1)

您可以通过两种方式避免您的问题:

  • 如果coord [i]不应该为空

    if (Data.coord[i] != null) {
        if(Data.coord[i].equals(Data.search)) {
    
        }
    } else {
        logger.error("Unexpected Behavior: coord[i] should not be null");
    }
    

注意:您可以使用符合您要求的更合适的代码替换记录器消息。


  • 如果您的coord [i]可以为空

如果Data.coord [i]为null,则以这种方式进行比较不会抛出异常。 (假设Data.search是常量而不能为null)所以这种情况的规则是:在优先级中使用String对象常量来调用方法equals。

if (Data.search.equals(Data.coord[i])) {}

答案 4 :(得分:0)

试试这个:

if(DATA != null && Data.coord[i].equals(Data.search))

答案 5 :(得分:0)

阅读本文以了解What is a Null Pointer Exception?

如果正确初始化coord [],Data.coord[i]的值可能为空。你可以检查

if(Data.coord[i] != null && Data.coord[i].equals(Data.search)) {}