import java.util.Arrays;

Главная ошибка — readLine вызывается дважды и пропускает строки. Также есть утечки при исключениях, глобальное накопление состояния, скрытые ошибки и некорректная запись CSV.

Короткий ответ

Что ответить на собеседовании

Главная ошибка — readLine вызывается дважды и пропускает строки. Также есть утечки при исключениях, глобальное накопление состояния, скрытые ошибки и некорректная запись CSV.

Подробный разбор

Ответ с пояснениями

Условие

import java.util.Arrays; import java.util.HashMap; import java.util.Map;

public class badCounter { public static Map<String, Integer> mapOfBadNames = new HashMap<>();

protected void doProcessing(String filePath) throws IOException {
    try {
        FileInputStream fis = new FileInputStream(filePath);
        BufferedReader br = new BufferedReader(new InputStreamReader(fis));
        while((br.readLine())!=null){
            processWords(br.readLine());
        }
        br.close();
        fis.close();
    } catch (IOException | NullPointerException ex) {
        System.out.println(ex.getMessage());
    }
}

private void processWords(String line) {
    Arrays.stream(line.split(" "))
        .map(String::trim)
        .forEach(word -> {
            if(mapOfBadNames.containsKey(word)){
                mapOfBadNames.put(word, mapOfBadNames.get(word)+1);
            } else{
                mapOfBadNames.put(word, 1);
            }
        });
}

public void writeResultToFile(String path) throws IOException {
    try {
        PrintWriter out = new PrintWriter(path);
        out.println("word,frequency");
        for(Map.Entry<String, Integer> entry : mapOfBadNames.entrySet()){
            out.println(entry.getKey() + "," + entry.getValue());
        }
        out.close();
    } catch (NullPointerException | IOException ex) {
        throw new RuntimeException("Error writing to file", ex);
    }
}

public boolean isEverythingFine() {
    return true;
}

public static void main(String[] args) {
    badCounter bcn = new badCounter();
    try {
        bcn.doProcessing("bad_input.txt");
        bcn.writeResultToFile("result.csv");

        bcn.doProcessing("bad_input1.txt");
        bcn.writeResultToFile("result1.csv");
    } catch (IOException ex) {
        System.out.println("Something went wrong");
    }
}

}

Ответ

Главная ошибка — readLine вызывается дважды и пропускает строки. Также есть утечки при исключениях, глобальное накопление состояния, скрытые ошибки и некорректная запись CSV.

Исправленный независимый подсчёт для одного файла:

static Map<String, Integer> countWords(Path path) throws IOException {
    Map<String, Integer> counts = new HashMap<>();
    try (BufferedReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8)) {
        String line;
        while ((line = reader.readLine()) != null) {
            for (String word : line.trim().split("\\s+")) {
                if (!word.isEmpty()) counts.merge(word, 1, Integer::sum);
            }
        }
    }
    return counts;
}

Нужны импорты java.io, java.nio.file, java.nio.charset и java.util. Public static HashMap смешивает результаты двух файлов и не потокобезопасен. Не ловите NullPointerException как штатную ошибку ввода и не продолжайте после скрытого IOException. Для CSV экранируйте кавычки, запятые и переносы; используйте writer с передачей ошибок либо проверяйте PrintWriter.checkError(). isEverythingFine() всегда true ничего не проверяет. Для больших объёмов выберите счётчик без переполнения Integer.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее