Привет,
Уже решил несколько задач на crud и вроде бы сложностей с args не было, но здесь просто беда...
Как правильно его парсить?
По идеи индексы должны быть следующие: -u[0], id[1], productName[2], price quantity[3], но если подставим строку из условия все выглятит иначе, здесь я использовал "+" как разделитель и вывел в консоль для наглядности:
строка из условия: 19847 Шорты пляжные синие 159.00 12
вывод массива args: -u[0]+19847[1]+Шорты[2]+пляжные[3]+синие[4]+159.00[5]+12[6]+
Получается при запуске с аргументами первые пробелы используются как разделители а остальные пропадают...
Даже если соберу весь массив в одну строку и считаю первые цыфры до букв как id, как дальше написать общую логику правильного разделения на отдельные слова такого отрезка : Шорты+пляжные+синие?
Можно ли при вводе параметров использовать "кастомные разделители"?
Понятно что эта задача решается какой то другой логикой, но хотелось бы разобратся с args.
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) {
for(String s : args){
System.out.print(s + "+");
}
BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));
try {
String file = consoleReader.readLine();
BufferedReader br = new BufferedReader(new FileReader(file));
BufferedWriter bw = new BufferedWriter(new FileWriter(file, true));
if(!(args.length==0)){
if(args[0].equals("-u")){
updateList(args, br, bw);
}
if(args[0].equals("-d")){
deleteRecord(args, br, bw);
}
}
}catch (Exception e){
}
}
//print args array and check what it contains
public static void updateList(String[] args, BufferedReader br, BufferedWriter bw){
ArrayList<String> tempbuffer = new ArrayList<>();
String updatedRecord = updateLine(args);
System.out.println("updated line" + updatedRecord);
try{
while (br.ready()){
tempbuffer.add(br.readLine());
}
}catch (Exception e){ }
for(String s : tempbuffer){
Integer oldIndex = Integer.parseInt(s.substring(0, 8).trim());
Integer newIndex = Integer.parseInt(args[1].substring(0, 8).trim());
if(oldIndex.equals(newIndex)){
tempbuffer.set(tempbuffer.indexOf(s), updatedRecord);
}
}
System.out.println(tempbuffer);
try {
PrintWriter pw = new PrintWriter(bw);
for(String s: tempbuffer){
pw.println(s);
}
}catch (Exception e){ }
}
public static void deleteRecord(String[] args, BufferedReader br, BufferedWriter bw){
ArrayList<String> tempbuffer = new ArrayList<>();
try{
while (br.ready()){
tempbuffer.add(br.readLine());
}
}catch (Exception e){ }
tempbuffer.removeIf(s -> s.startsWith(args[1].substring(0, 8)));
try{
bw.write("");
PrintWriter pw = new PrintWriter(bw);
for(String s: tempbuffer){
pw.println(s);
}
}catch (Exception e){ }
}
public static String updateLine(String[] args) {
StringBuilder sb = new StringBuilder();
String id = updateRecord(args[1], 8);
String productName = updateRecord(args[2], 30);
String price = updateRecord(args[3], 8);
String quantity = updateRecord(args[4], 4);
sb.append(id);
sb.append(productName);
sb.append(price);
sb.append(quantity);
return sb.toString();
}
public static String updateRecord(String line, int length) {
StringBuilder sb = new StringBuilder();
String result;
if (line.length() > length) {
result = line.substring(0, length); //line.substring(0, length + 1);
} else {
sb.append(line);
while (sb.length() < length) {
sb.append(" ");
}
result = sb.toString();
}
return result;
}
}