Тестировал с разнымы вариациями в файле. Всегда выводит нужный и правильный результат на экран. Но валидатор не пускает.
package com.javarush.task.task18.task1822;
/*
Поиск данных внутри файла
*/
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
FileInputStream fileInputStream = new FileInputStream(bufferedReader.readLine());// создаем поток для чтения
byte[] byteArray = new byte[fileInputStream.available()];
fileInputStream.read(byteArray);
fileInputStream.close(); // закрываем поток для чтения
StringBuilder sb = new StringBuilder();
for(int i=0; i<byteArray.length; i++) //запись всех данных файла в stringBuilder
sb.append((char) byteArray[i]);
Scanner scannerFile = new Scanner(sb.toString()); //сканер для поиска в stringBuilder'е
List<String> lineArray = new ArrayList<>();
while (scannerFile.hasNext()) lineArray.add(scannerFile.nextLine()); //сканируем и записываем в массив все строки(товары)
scannerFile.close();
sb = new StringBuilder();
List<String> productArray = new ArrayList<>();
int id;
String productName;
double price;
int quantity;
Scanner scanner;
for(int i=0; i<lineArray.size(); i++) {
scanner = new Scanner(lineArray.get(i)); // cканирование строк(товаров)
while (scanner.hasNext()){
productArray.add(scanner.next()); //добавление в строковый массив идентификаторов товара(id, name`s, price, quantity)
}
id = Integer.parseInt(productArray.get(0)); // присвоение первого идентификатора id
if(id == Integer.parseInt(args[0])) { // если аргумент совпал с id, добавляем остальные идентификаторы
price = Double.parseDouble(productArray.get(productArray.size()-2)); //добавляем цену(предпоследний идентификатор в строке)
quantity = Integer.parseInt(productArray.get(productArray.size()-1)); // добавляем количество(последний идентификатор в строке)
for (int y=1; y<productArray.size()-2; y++) sb.append(productArray.get(y) + " "); //добавляем имя+пробел(все идентификаторы кроме первого и двух последних в строке)
sb.deleteCharAt(sb.length()-1);// убираем лишний пробел в конце имени товара
productName = sb.toString();
System.out.println(id + " " + productName + " " + price + " " + quantity);// вывод на экран
i=lineArray.size()-1;//прекращаем перебор строк с поиском id
}
else productArray.clear();// если id не найден, очищаем массив с идентификаторами
scanner.close();
}
}
}