Валидатор не принимает пункт 3.
Уже и trim() добавил на всякий случай, и поиск элемента в try-catch обернул (без него та же ошибка).
Посмотрел ошибки из вопросов, на своих данных проверяю - элемент остаётся на том же месте в файле, информация меняется, точки на запятые в файле не меняются, id сравнивается не contains()...
Не могу понять в чём проблема.
package com.javarush.task.task18.task1828;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
/*
Прайсы 2
*/
public class Solution {
public static void main(String[] args) throws Exception {
/*Закомментить!!!1111*/
//args = new String[]{"-u", "198478", "Рога", "250.00", "17"};
if (args.length > 0) {
try {
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
String dataFile = r.readLine();
r.close();
List<Good> goods = readDB(dataFile);
switch (args[0]) {
case "-c": {
Good good = new Good();
good.name = args[1];
good.price = Double.parseDouble(args[2]);
good.quantity = Integer.parseInt(args[3]);
good.id = goods.stream().map(g -> g.id).max(Comparator.comparingInt(x -> x)).get() + 1;
goods.add(good);
break;
}
case "-u": {
int id = Integer.parseInt(args[1].trim());
double price = Double.parseDouble(args[3].trim());
int quantity = Integer.parseInt(args[4].trim());
try {
goods.stream().filter(g -> g.id == id).findFirst().get().update(args[2], price, quantity);
} catch (java.util.NoSuchElementException e) {
System.out.println("Элемент с таким id не найден: " + id);
}
break;
}
case "-d": {
int id = Integer.parseInt(args[1].trim());
goods.remove(goods.stream().filter(g -> g.id == id).findFirst().get());
break;
}
default:
System.out.println("Неизвестный ключ");
break;
}
writeDB(dataFile, goods);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static List<Good> readDB(String dataFile) throws Exception {
List<Good> resultArray = new ArrayList<>();
FileReader dataReader = new FileReader(dataFile);
char[] lastDataCharArray = new char[51];
while (dataReader.ready()) {
dataReader.read(lastDataCharArray);
StringBuilder dataString = new StringBuilder();
dataString.insert(0, lastDataCharArray, 0, lastDataCharArray.length);
int id = Integer.parseInt(dataString.substring(0, 8).trim());
String name = dataString.substring(8, 38);
double price = Double.parseDouble(dataString.substring(38, 46).trim());
int quantity = Integer.parseInt(dataString.substring(46, 50).trim());
resultArray.add(new Good(id, name, price, quantity));
}
dataReader.close();
return resultArray;
}
public static void writeDB(String dataFile, List<Good> goods) throws Exception {
FileWriter dataWriter = new FileWriter(dataFile);
for (Good good : goods) {
dataWriter.write(good.toString() + "\n");
}
dataWriter.close();
}
}
class Good {
int id;
String name;
double price;
int quantity;
public Good() {
}
public Good(int id, String name, double price, int quantity) {
this.id = id;
this.name = name;
this.price = price;
this.quantity = quantity;
}
public void update(String name, double price, int quantity){
this.name = name;
this.price = price;
this.quantity = quantity;
}
@Override
public String toString() {
String dataId = String.valueOf(id);
String dataPrice = String.valueOf(price);
String dataQuantity = String.valueOf(quantity);
return String.format("%-8s%-30s%-8s%-4s", dataId, name, dataPrice, dataQuantity);
}
}