Снова вопрос по задаче, не проходит валидацию по 3 пункту. Может кто-то подскажет в чем дело?
Или подкиньте строк для тестирования где будет понятно в каком месте криво работает?
package com.javarush.task.task18.task1828;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
/*
Прайсы 2
*/
public class Solution {
public static void main(String[] args) throws IOException {
//args = new String[] { "-u", "12345679", "Куртка для сноубордистов, размеры есть разные", "10173.99", "12345" };
//args = new String[] {"-d", "12345679"};
ArrayList<Integer> listId = new ArrayList<Integer>();
ArrayList<String> listString = new ArrayList<String>();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter file name");
String fileName = reader.readLine();
if (args.length == 0) return;
BufferedReader fr = new BufferedReader(new FileReader(fileName));
while (fr.ready()) {
String str = fr.readLine();
listId.add(Integer.parseInt(str.substring(0,8).trim()));
listString.add(str);
}
FileWriter writer = new FileWriter(fileName, false);
int id;
String productName;
String price;
String quantity;
if (args[0].equals("-u")) {
id = Integer.parseInt(args[1]);
productName = String.format("%-30s", args[2]).substring(0,30);
price = String.format("%-8.2f", Float.parseFloat(args[3])).substring(0,8);
quantity = String.format("%-4s", Integer.parseInt(args[4])).substring(0,4);
String sb = id + productName + price + quantity;
for (int i = 0; i < listId.size(); i++) {
if (id == listId.get(i)) {
listString.set(i, sb);
}
}
for (String s : listString) {
//System.out.println(s);
writer.write(s);
writer.write("\n");
}
}
if (args[0].equals("-d")) {
id = Integer.parseInt(args[1]);
for (int i = 0; i < listId.size(); i++) {
if (id == listId.get(i))
listString.remove(i);
}
for (String s : listString) {
//System.out.println(s);
writer.write(s);
writer.write("\n");
}
}
writer.close();
fr.close();
}
}
//d:/Стажировка JAVA/Tasks Head First/src/1.txt
со шрифтамис локалями, вот что получается: Если локаль ru-RU или de_DE, то выводит с запятой. Если эксплицитно указать английскую String.format(new Locale("en", "EN"), "%-8f", Float.parseFloat(args[3])).substring(0, 8) то выводит с точкой. Попробуй локаль эксплицитно передать, мы не знаем, что там у валидатора по дефолту стоит.