Не могу разобраться как сортировать в файле по фамилии
public class Person implements Serializable, Comparable<Person> {
TreeSet<Person> myPersonArrayList = new TreeSet<>();
private static int countId = 0;
public String name;
public String surname;
public String secondName;
public String age;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age.equals(person.age) &&
Objects.equals(name, person.name) &&
surname.equals(person.surname) && secondName.equals(person.secondName);
}
public Person(String Name,String Surname,String SecondName,String age){
this.name = Name;
this.surname = Surname;
this.secondName = SecondName;
this.age = age;
}
public void SetName(String Name){
this.name = Name;
}
public void SetSurname(String Surname){
this.surname = Surname;
}
public void SetSecondName(String SecondName){
this.secondName = SecondName;
}
public void SetAge(String age) {
this.age = age;
}
public String GetName(){
return this.name;
}
public String GetSurname(){
return this.surname;
}
public String GetSecondName(){
return this.secondName;
}
public String GetAge(){
return this.age;
}
public String toString() {
return "\n " + name +
"\n " + surname +
"\n " + secondName +
"\n " + age + "\n";
}
public int compareTo( Person o ){
if (this.equals( o )){
return 0;
}
return this.GetName().compareTo( o.GetName() );
}
public static Person parse(String string) {
String[] parts = string.split(" ");
if(parts.length != 4) {
throw new IllegalArgumentException("Всего элементов в строке должно быть 4!");
}
if(!isDate(parts[3])) {
throw new IllegalArgumentException("Дата записана неверно!");
}
return new Person(parts[0], parts[1], parts[2], parts[3]);
}
public static boolean isDate(String date) {
return date.length() == 2 + 1 + 2 + 1 + 4 &&
isNumber(date.substring(0, 2)) &&
date.charAt(2) == '.' &&
isNumber(date.substring(3, 5)) &&
date.charAt(5) == '.' &&
isNumber(date.substring(6, 10));
}
private static boolean isNumber(String string) {
for(char ch : string.toCharArray()) {
if(!isNumber(ch)) {
return false;
}
}
return true;
}
private static boolean isNumber(char ch) {
return ch == '0' || ch == '1' || ch == '2' || ch == '3' || ch == '4' ||
ch == '5' || ch == '6' || ch == '7' || ch == '8' || ch == '9';
}
public int compareBySurname(Person p) {
return surname.compareTo(p.surname);
}
public int compareByDate(Person p) {
int myYear = Integer.parseInt(age.substring(6, 10));
int pYear = Integer.parseInt(p.age.substring(6, 10));
int myMonth = Integer.parseInt(age.substring(3, 5));
int pMonth = Integer.parseInt(age.substring(3, 5));
int myDay = Integer.parseInt(age.substring(0, 2));
int pDay = Integer.parseInt(age.substring(0, 2));
if(myYear > pYear) {
return -1;
} else if(myYear == pYear) {
if(myMonth > pMonth) {
return -1;
} else if(myMonth == pMonth) {
return pDay - myDay;
} else {
return 1;
}
} else {
return 1;
}
}
}
то есть в файле сохранены имя, фамилия, отчество и дата рождения Нужно через команду в консоли отсортировать список в файле по фамилиям.
Petrov Petya Petrovich 01.01.1999
public static Boolean removeSurname() throws IOException {
File file;
String line;
Scanner in = new Scanner(System.in);
Set<Person> res = new TreeSet<>();
System.out.print("Из какого файла удалить: ");
line = in.nextLine();
System.out.print("Какую фамилию удалить: ");
String lineToRemove;
String inLine = "";
lineToRemove = in.nextLine();
try {
file = new File(in.nextLine());
System.out.println();
} catch (NullPointerException n) {
System.err.println("Такого файла не существует");
return false;
}
FileInputStream fis = new FileInputStream(line + ".txt");
BufferedWriter bufferWriter = new BufferedWriter(new FileWriter(line + ".txt", true));
InputStreamReader isr = new InputStreamReader(fis, StandardCharsets.UTF_8);
BufferedReader reader = new BufferedReader(isr);
String strInfo;
while ((strInfo = reader.readLine()) != null) {
String[] arrInfo = strInfo.split(" ");
res.add(new Person(arrInfo[0], arrInfo[1], arrInfo[2], arrInfo[3]));
if(lineToRemove.equals(strInfo)){
res.remove(); //???
bufferWriter.newLine();
bufferWriter.write(inLine);
bufferWriter.flush();
}
}
fis.close();
reader.close();
bufferWriter.close();
return true;
}
import java.io.Serializable;
import java.util.Objects;
import java.util.TreeSet;
class Person implements Serializable, Comparable<Person> {
TreeSet<Person> myPersonArrayList = new TreeSet<>();
private static int countId = 0;
public String name;
public String surname;
public String secondName;
public String age;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age.equals(person.age) &&
Objects.equals(name, person.name) &&
surname.equals(person.surname) && secondName.equals(person.secondName);
}
public Person(String Name,String Surname,String SecondName,String age){
this.name = Name;
this.surname = Surname;
this.secondName = SecondName;
this.age = age;
}
public void SetName(String Name){
this.name = Name;
}
public void SetSurname(String Surname){
this.surname = Surname;
}
public void SetSecondName(String SecondName){
this.secondName = SecondName;
}
public void SetAge(String age) {
this.age = age;
}
public String GetName(){
return this.name;
}
public String GetSurname(){
return this.surname;
}
public String GetSecondName(){
return this.secondName;
}
public String GetAge(){
return this.age;
}
public String toString() {
return "\n " + name +
"\n " + surname +
"\n " + secondName +
"\n " + age + "\n";
}
public int compareTo(Person o) {
//используем метод compareTo из класса String для сравнения имен
int result = this.surname.compareTo(o.surname); // Здесь указать
name/surname/second/date
//если имена одинаковые - сравниваем возраст, используя метод compareTo из класса Integer
if (result == 0) {
result = this.age.compareTo(o.age);
}
return result;
}
public static Person parse(String string) {
String[] parts = string.split(" ");
if(parts.length != 4) {
throw new IllegalArgumentException("Всего элементов в строке должно быть 4!");
}
if(!isDate(parts[3])) {
throw new IllegalArgumentException("Дата записана неверно!");
}
return new Person(parts[0], parts[1], parts[2], parts[3]);
}
public static boolean isDate(String date) {
return date.length() == 2 + 1 + 2 + 1 + 4 &&
isNumber(date.substring(0, 2)) &&
date.charAt(2) == '.' &&
isNumber(date.substring(3, 5)) &&
date.charAt(5) == '.' &&
isNumber(date.substring(6, 10));
}
private static boolean isNumber(String string) {
for(char ch : string.toCharArray()) {
if(!isNumber(ch)) {
return false;
}
}
return true;
}
private static boolean isNumber(char ch) {
return ch == '0' || ch == '1' || ch == '2' || ch == '3' || ch == '4' ||
ch == '5' || ch == '6' || ch == '7' || ch == '8' || ch == '9';
}
}
Тест
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class Solution {
public static void main(String[] args){
// Возьмите ваши данные из файла и поместите в массив по аналогии
ArrayList<Person> list = new ArrayList<>();
list.add(new Person("A", "B", "Romanovich", "02.01.2006"));
list.add(new Person("C", "A", "Dmitrievich", "02.05.2005"));
list.add(new Person("B", "C", "Petrovich", "12.11.2001"));
// Можете добавить многопоточность, чтобы всегда была возможность читать команды с консоли
if(new Scanner(System.in).nextLine().equals("sort")){
Collections.sort(list);
for (Person u : list) {
System.out.println(u);
}
}
}
}
Дальше думаю справитесь сами =)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Помогите разобраться в логике действийЧто левый оперант всегда сохраняется отдельно и потом возвращается более менее осознал в некоторых...
пытаюсь в массиве вывести все ошибки которые были допущены, но в нем оказывается только одна, остальные выводит