Очень меня вдохновили первые пару глав книги "Чистый код" - ну там про то, что функции должны быть короткие, названия емкие и так далее... И тут я такой думаю, а почему бы и нет собственно, и задачка вроде не сложная. Дай попробую...ну и попробовал)))
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;
/*
Ищем нужные строки
*/
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 {
for (String string : readFile(readFileName())){
String[] subStrings = string.split(" ");
if (isInStringOnly2KeyWords(subStrings)){
System.out.println(string);
}
}
}
public static String readFileName () throws IOException {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))){
return reader.readLine();
}
}
public static ArrayList<String> readFile (String fileName) throws IOException {
ArrayList<String> strings = new ArrayList<>();
try (BufferedReader fileReader = new BufferedReader(new FileReader(readFileName()))){
while (fileReader.ready()){
strings.add(fileReader.readLine());
} return strings;
}
}
public static boolean isInStringOnly2KeyWords (String[] string){
int count = 0;
for (int i = 0; i < words.size(); i++){
count += Collections.frequency(Arrays.asList(string), words.get(i));
} return count == 2;
}
}