Вот что говорит валидатор:
"Убедись, что учитывается весь id, а не его часть."
Ну, так оно и есть, с моей точки зрения - пришла в параметре строка, убедился что можно запарсить в int - запарсил. При необходимости - обратно перегнал в строку. Где там данные то теряются?
Не совсем понятно - подразумевается ли что id уникален?
Плюс, была мысль запарсить строку со всеми параметрами в файле на собственно
"id - int.
productName - название товара, может содержать пробелы, String.
price - цена, double.
quantity - количество, int."
Но идей никаких. Не понятно как засплитить эти параметры, если productName может содержать пробелы, я полагаю что в данной ситуации так сделать не выйдет. Прав ли я?
package com.javarush.task.task18.task1822;
/*
Поиск данных внутри файла
*/
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Solution {
public static void main(String[] args) throws Exception {
if(args.length==0 || (!args[0].matches("^[0-9]*"))){
throw new IllegalArgumentException("Illegal command line argument");
}
int commandLineArgument = Integer.parseInt(args[0]);
BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));
String fileName = consoleReader.readLine();
consoleReader.close();
String dataById = readAllIdDataIOStreams(commandLineArgument,fileName).get(0);
System.out.println(dataById);
}
private static List<String> readAllIdDataStreamApi(int id,String fileName) throws IOException {
/*return Files.lines(Paths.get(fileName))
.filter(str->str.startsWith(String.valueOf(id)))
.map(str -> str+="\n")
.collect(Collectors.joining());*/
return Files.lines(Paths.get(fileName))
.filter(str->str.startsWith(String.valueOf(id)))
.collect(Collectors.toList());
}
private static List<String> readAllIdDataIOStreams(int id,String fileName) throws IOException {
List<String> dataById = new ArrayList<>();
try (BufferedReader fileReader = new BufferedReader(new FileReader(fileName))) {
String lineRead = null;
while ((lineRead = fileReader.readLine()) != null) {
if (!lineRead.trim().startsWith(String.valueOf(id))) {
continue;
}
dataById.add(lineRead);
}
} catch (FileNotFoundException fnfe){
throw new FileNotFoundException("No such file found");
}
return dataById;
}
}