Рекомендация от валидатора:
Убедись, что выводится id (index) добавленного человека на экран.Чтобы не пришлось выдумывать, пример входных данных, сразу по 4 параметрам, который пройдёт мой regex: -c Капитан Бобров Фёдорович ж 20/07/2022, -r 2, -u 0 Зепп Браниган м 01/01/1990, -d 1 Как можно заметить, я немного усложнил себе задание. Сначала перевожу аргументы в строку, затем с помощью регулярного выражения вытягиваю из неё все параметры. Входных данных может быть сколько угодно через запятую, главное, чтобы были правильно введены, тк. исключения я не обрабатывал в коде. Помогите разобраться, на чем именно валится валидатор и пройти проверку.
package com.javarush.task.task17.task1710;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
CRUD
*/
public class Solution {
public static List<Person> allPeople = new ArrayList<Person>();
static {
allPeople.add(Person.createMale("Иванов Иван", new Date())); //сегодня родился id=0
allPeople.add(Person.createMale("Петров Петр", new Date())); //сегодня родился id=1
}
public static void main(String[] args) {
String arguments = String.join(" ", args);
Pattern p = Pattern.compile("(^| )" +
"(?<param>-[crud])" +
"( (?<id>\\d{1,5}))?" +
"( (?<name>([А-Яё][а-яё]{2,30})( [А-Яё][а-яё]{2,30}){0,2}) " + // Имя из 3 и более букв + отчество/фамилия(не обязательдно)
"(?<sex>м|ж) " +
"(?<bd>(?<D>[0-3]\\d)/(?<M>0\\d|1[0-2])/(?<Y>(19|20)\\d{2}))($|,))?"); // Дата формата DD/MM/YYYY 20-21 век
Matcher m = p.matcher(arguments);
while (m.find()) {
String param = m.group("param");
int id;
String name;
String sex;
Calendar calendar;
Date bd;
switch (param) {
case "-c":
name = m.group("name");
sex = m.group("sex");
calendar = Calendar.getInstance(Locale.ENGLISH);
calendar.set(Integer.parseInt(m.group("Y")),
Integer.parseInt(m.group("M")) - 1,
Integer.parseInt(m.group("D")));
bd = calendar.getTime();
create(name, sex, bd);
break;
case "-r":
id = Integer.parseInt(m.group("id"));
read(id);
break;
case "-u":
id = Integer.parseInt(m.group("id"));
name = m.group("name");
sex = m.group("sex");
calendar = Calendar.getInstance(Locale.ENGLISH);
calendar.set(Integer.parseInt(m.group("Y")),
Integer.parseInt(m.group("M")) - 1,
Integer.parseInt(m.group("D")));
bd = calendar.getTime();
update(id, name, sex, bd);
break;
case "-d":
id = Integer.parseInt(m.group("id"));
delete(id);
break;
}
}
}
public static void create(String name, String sex, Date bd) {
Person person = null;
if (sex.equals("м")) {
person = Person.createMale(name, bd);
} else if (sex.equals("ж")) {
person = Person.createFemale(name, bd);
}
allPeople.add(person);
System.out.println(allPeople.indexOf(person));
}
public static void read(int id) {
Person person = allPeople.get(id);
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH);
System.out.println(person.getName() + " "
+ (person.getSex().name().equals("MALE") ? "м" : "ж") + " "
+ dateFormat.format(person.getBirthDate()));
}
public static void update(int id, String name, String sex, Date bd) {
Person person = allPeople.get(id);
person.setName(name);
person.setSex(sex.equals("м") ? Sex.MALE : Sex.FEMALE);
person.setBirthDate(bd);
}
public static void delete(int id) {
Person person = allPeople.get(id);
person.setName(null);
person.setSex(null);
person.setBirthDate(null);
}
}