Сама суть программы работает верно, находит она эти два совпадения.
Но, не могу понять почему когда во второй список secondList пытаюсь добавить считанную строку reader.readLine(), первое значение теряется...те как в примере Д А Б Д и Д А А Д оба удовлетворяют условию, сумму для них считает 2, но записывается только Д А А Д
package com.javarush.task.task19.task1922;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* Ищем нужные строки
* Считать с консоли имя файла.
* Вывести в консоль все строки из файла, которые содержат всего 2 слова из списка words.
* Закрыть потоки.
* <p>
* Пример:
* words содержит слова А, Б, В
* <p>
* Строки:
* В Б А Д //3 слова из words, не подходит
* А Б А Д //3 слова из words, не подходит
* Д А Д //1 слово из words, не подходит
* Д А Б Д //2 слова - подходит, выводим
* Д А А Д //2 слова - подходит, выводим
* <p>
* <p>
* Требования:
* 1. Класс Solution должен содержать публичное статическое поле words типа List<String>, которое должно быть
* сразу проинициализировано.
* 2. Класс Solution должен содержать статический блок, в котором добавляются три или больше слов в список words.
* 3. Программа должна считывать имя файла с консоли (используй BufferedReader).
* 4. BufferedReader для считывания данных с консоли должен быть закрыт.
* 5. Программа должна считывать содержимое файла (используй FileReader).
* 6. Поток чтения из файла (FileReader) должен быть закрыт.
* 7. Программа должна выводить в консоль все строки из файла, которые содержат всего 2 слова из списка words.
* Ищем нужные строки
*/
public class Solution {
public static List<String> words = new ArrayList<String>();
static {
words.add("файл");
words.add("вид");
words.add("В");
}
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
FileReader fileReader = new FileReader(reader.readLine());
List<String> firstList = new ArrayList<>();
List<String> secondList = new ArrayList<>();
int sum = 0;
while (reader.ready()) {
String[] strings = reader.readLine().split(" ");
firstList = Arrays.asList(strings);
for (String element : words) {
sum += Collections.frequency(firstList, element);
}
if (sum == 2) {
secondList.add(reader.readLine());
}
sum = 0;
}
for (String element : secondList) {
System.out.println(element);
}
reader.close();
fileReader.close();
}
}