package assagment3; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.ArrayList; public class Person { String ime; String prezime; LocalDate datumRodjenja; String mestoRodjenja; Person p; public Person(String ime, String prezime, LocalDate datumRodjenja, String mestoRodjenja) { this.ime = ime; this.prezime = prezime; this.datumRodjenja = datumRodjenja; this.mestoRodjenja = mestoRodjenja; } @Override public String toString() { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd MMM yyyy"); return "Person{\n" + "ime=" + ime + ",\n prezime=" + prezime + ",\n datumRodjenja=" + formatter + ",\n mestoRodjenja=" + mestoRodjenja + '}'; } }
package assagment3; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Date; import java.lang.String; import static java.lang.System.in; public class Assagment3 { public static void main(String[] args) { ArrayList <Person> lista = null; String text = "John.Davidson/05051988/Belgrade Michael.Barton/01011968/Krakov Ivan.Perkinson/23051986/Moscow"; String [] tekst=text.split("[ ./]+"); for(int i=0; i<tekst.length; i+=4) { String ime = tekst[i]; String prezime = tekst[i+1]; String datumRodjenja = tekst[i+2]; String mestoRodjenja = tekst[i+3]; System.out.println(" "); System.out.println(" Ime je: " + ime + "\n Prezime je: " + prezime +"\n Datum Rodjenja je: "+datumRodjenja+"\n Mesto Rodjenja: "+mestoRodjenja); } } }
Ispis treba da bude oblika:
John Davidson 05. May 1988. Belgrade
Michael Barton 01. Jan 1968. Krakov
Ivan Perkinson 23. May 1986. Moscow
Treba da imate dve klase:
Polje za datum rođenja u klasi Person (i njenom konstruktoru) mora da bude tipa LocalDate. Onda, u klasi Person treba vršiti konverziju datuma iz tipa LocalDate u String, a konverzija datuma iz Stringa u LocalDate treba da se vrši u glavnoj klasi.
Zapis menjao Ivica 12.02.2018.
zlocko86 11.02.2019 Одељци: Зид Питања и одговори Ивица zlocko86 | Кључне речи: parsiranje Java IT Akademija
|
0
|
Ово је задатак са ИТ Академије. Од студента се очекује да користи методу split класе String. Прво је потребно разбити стринг на делове одвојене спејсовима. Сваки такав део садржаће податке једне особе. Те податке је поново потребно разбити на делове који се налазе између косих црта (slash "/"). Име и презиме на сличан начин треба раздвојити на делове одвојене тачком. Први параметар функције split није било какав текст, већ je регуларни израз. Регуларни изрази имају своја синтаксна правила и представљају својеврсни језик. Мој омиљени сајт за тестирање (и учење) регуларних израза је https://regex101.com/. Нажалост на овом сајту нема подршке за Јаву, тако да се могу очекивати мале разлике, али концепт је углавном исти код свих језика.
У овом одговору представићу методу која парсира стринг и враћа листу објеката. Решење подразумева напреднију употребу регуларних израза без коришћења функције split. Заинтересовани за часове програмирање могу ме контактирати путем мејла: [email protected].
private static ArrayList<Person> listaOsoba(String data) { ArrayList<Person> ret = new ArrayList<>(); Pattern regex = Pattern.compile("(?<ime>\\w+)\\.(?<prezime>\\w+)/(?<datum>\\d+)/(?<mesto>\\w+)(?:\\s|$)"); Matcher m = regex.matcher(data); while (m.find()) { LocalDate datum; datum = LocalDate.parse(m.group("datum"), DateTimeFormatter.ofPattern("ddMMyyyy")); Person p = new Person(m.group("ime"), m.group("prezime"), datum, m.group("mesto")); ret.add(p); } return ret; }
Ивица 12.02.2019 Одељци: Зид Питања и одговори Ивица | Кључне речи: IT Akademija |
0
|
©Библиотека++ 2024 Развој сајта Ивица Лазаревић