Я пытался решить задачу используя Scanner вместо BufferedReader, но при проверке постоянно отваливалось на пунктах закрытия потоков, при том, что scanner я закрывал.
+ если для проверки листов использовать циклы, то тоже ругается, что не удаляются нужные строки.
Кто-то может объяснить, почему этим методом "нельзя" решить эту задачу ?
есть ли какие-то нюансы, почему такой вариант не проходит ?
p.s. да, я знаю, что BufferedReader чуть быстрее работает, чем Scanner, у него больше буфер и он синхронизирован, но мы тут не работает с многопоточностью поэтому принципиальной разницы в использовании в этой задачи не вижу.
по циклам: да, есть готовые методы которые делают тоже самое для листов, но у которых под капотом лежат те же циклы. Опять же непонятно почему нельзя через циклы это сделать.
Это решение не работает и валидатором не проходит примерно по половине пунктов. При том, что по факту отрабатывает как нужно. Я создавал на компе файлы, записывал туда разные значения, одинаковые, разные, менял значения множество раз, каждый раз запускал и смотрел результат с выводом данных через sout. Все отрабатывало согласно условиям задачи, но при этом валидатор не проходит.
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
String firstFileName = scanner.nextLine();
String secondFileName = scanner.nextLine();
scanner = new Scanner(Files.newInputStream(Paths.get(firstFileName)));
while (scanner.hasNextLine()) {
allLines.add(scanner.nextLine());
}
scanner = new Scanner(Files.newInputStream(Paths.get(secondFileName)));
while (scanner.hasNextLine()) {
forRemoveLines.add(scanner.nextLine());
}
scanner.close();
new Solution().joinData();
}
public void joinData() throws CorruptedDataException {
for (String forRemoveLine : forRemoveLines) {
if(!allLines.contains(forRemoveLine)) {
allLines.clear();
throw new CorruptedDataException();
}
}
for (String forRemoveLine : forRemoveLines) {
allLines.remove(forRemoveLine);
}
}