Исключение нулевого указателя для назначения 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"))

который делает сравнение значений.

Другие вопросы по тегам