我有一个分配,我必须从文件中获取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++;
}
答案 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"))
执行值比较。