Java Assignment的空指针异常

时间:2013-09-14 23:15:08

标签: java nullpointerexception

我有一个分配,我必须从文件中获取URL(如果没有给出文件,则为标准输入),然后计算方案等于某些事物的次数以及域等于某些事物的次数。

这是我的代码的一部分,它接受输入,将其拆分为方案和域,然后在找到某些单词时增加变量。但是,我一直在NullPointerException,我无法弄清楚原因。现在,此代码在第16行出现错误。任何帮助都将不胜感激。

File file = new File("input");
Scanner scan = new Scanner("input");
Scanner scan2 = new Scanner(System.in);
while (!scan.next().equals("end") || !scan2.next().equals("end")) {
    if (scan.hasNext() == true) {
        url = scan.nextLine();
    }
    String[] parts = url.split(":");
    scheme = parts[0];
    schemeSP = parts[1];
    if (scheme == "http") {
        httpCt++;
    }
    if (scheme == "https") {
        httpsCt++;
    }
    if (scheme == "ftp") {
        ftpCt++;
    } else {
        otherSchemeCt++;
    }
    for (int j = 0; j < schemeSP.length(); j++) {
        if (schemeSP.charAt(j) == '.') {
            domain = schemeSP.substring(j);
        }
    }
    if (domain == "edu") {
        eduCt++;
    }
    if (domain == "org") {
        orgCt++;
    }
    if (domain == "com") {
        comCt++;
    } else {
        otherDomainCt++;
    }
    fileLinesCt++;
    totalLinesCt++;
}

2 个答案:

答案 0 :(得分:2)

我注意到一个特别明显的问题。

File file = new File("input");
Scanner scan = new Scanner("input");

Scanner正在使用String constructor而不是 File构造函数。我相信你原本打算这样做:

Scanner scan = new Scanner(new File("input"));

没有它,你正在扫描“输入”这个词。

此外,您没有正确比较String。您始终将它们与.equals()方法进行比较。

scheme == "http"之类的任何语句都应改为"http".equals(scheme)

答案 1 :(得分:0)

您的测试

if (scheme == "http")

永远都是假的,因为==会比较身份 - 即他们是相同的确切对象。

改为使用equals()

if (scheme.equals( "http"))

执行比较。