Исключение нулевого указателя для назначения Java
У меня есть задание, в котором я должен взять 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 ответа
Я заметил особенно вопиющую проблему.
File file = new File("input");
Scanner scan = new Scanner("input");
Тот Scanner
использует String
конструктор, а не File
конструктор. Я считаю, что вы намеревались сделать это:
Scanner scan = new Scanner(new File("input"));
Без этого вы сканируете слово "вход".
Кроме того, вы не сравниваете свои String
правильно. Вы всегда сравниваете их с .equals()
метод.
Любое утверждение как scheme == "http"
должен прочесть "http".equals(scheme)
вместо.
Ваши тесты как
if (scheme == "http")
Всегда будет ложным, потому что ==
сравнивает идентичность - то есть они один и тот же точный объект.
использование equals()
вместо:
if (scheme.equals( "http"))
который делает сравнение значений.