И так решаю, и этак. Ничего не хочет валидатор принимать.
Остановился на этом варианте, проверил тыщу раз, всё работает, но валидатор всё ещё капризничает.
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.List;
/*
Ищем нужные строки
Считать с консоли имя файла.
Вывести в консоль все строки из файла, которые содержат всего 2 слова из списка words.
Закрыть потоки.
Пример:
words содержит слова А, Б, В
Строки:
В Б А Д //3 слова из words, не подходит
Д А Д //1 слово из words, не подходит
Д А Б Д //2 слова - подходит, выводим
Требования:
1. Класс Solution должен содержать публичное статическое поле words типа List, которое должно быть сразу проинициализировано.
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));
BufferedReader reader1 = new BufferedReader(new FileReader(reader.readLine()));
reader.close();
while(reader1.ready()){
String full = reader1.readLine();
full = full.trim();
boolean first = false;
boolean second = false;
boolean third = false;
String[] strings = full.split(" ");
for(String s : strings){
s = s.trim();
if(s.equals(words.get(0))) first= true;
else if(s.equals(words.get(1))) second= true;
else if(s.equals(words.get(2))) third= true;
}
if((first && second && !third) || (first && third && !second) || (second && third && !first)) System.out.println( full);
}
reader1.close();
}
}