Tworzenie obiektu ze String Buffera

Odpowiedz Nowy wątek
2019-06-10 22:31
0

Witam,
Nazwa może być myląca, bo nie za bardzo wiedziałem jak nazwać.

Problem mam następujący. Posiadam plik test.txt, który zawiera powiedzmy takie dane jak imię, nazwisko, rokurodzenia. Przykład:

"Ania Mazurek 1999
Marta Kacprzak 1988"

Odczytuje plik scannerem, a następnie wrzucam przez String Buffer do zmiennej "str". Następnie posiadam dwie klasy. Jedną klasę Osoba z polami String imie, String nazwisko. I drugą klasę z prywatnym polem int rokUrodzenia. Przy pomocy konstruktorów próbuję stworzyć metodę, która zwraca obiekt, abym mógł wrzucić te obiekty do tablicy. Problem polega w tym, że w momencie, gdy chcę stworzyć metodę, to konstruktor wymaga podania argumentów. jak poniżej

public static Student metoda(){
return new Student(String: imie, String: nazwisko, int: rokUrodzenia)
}

Teraz zastanawiam się jak należy napisać "metodę", dzięki której na przykład będzie wiedział, że z odczytanych danych "Ania" to imię, albo że "Mazurek" to nazwisko. Tak abym mógł zrobić coś na zasadzie:

public static Student metoda(){
return new Student(imie(), naziwsko(), rokUrodzenia());
}

Osobiście zastanawiam się nad StringTokenizerem, albo do String Buffera użyć split().

edytowany 2x, ostatnio: iCorpore, 2019-06-10 22:57
po co rok urodzenia w osobnej klasie :D to może zrób sobie od razu 10 klas, w pierwszej daj imię, w drugiej nazwisko, w trzeciej rok urodzenia, w czwartej adres, w piątej telefon, w szóstej numer buta, w siódmej płeć, w ósmej rozmiar stanika (jeżeli płeć jest k, w przeciwnym razie null), w dziewiątej wzrost, w dzięsiątej waga - au7h 2019-06-11 00:32
Takie wymagania są zadania. Ogółem podałem tylko przykład. Pola w klasach wyglądają trochę inaczej. I zadanie jest bardziej rozbudowane. Odwoływałem się do konkretnego problemu - iCorpore 2019-06-11 00:41
no to normalnie wczytujesz dane z pliku txt i piszesz swój parser który na sztywno będzie miał określone, że w linijce numer x (pętla) na pierwszym miejscu jest imię i wczytaj go do napotkania " ", na drugim nazwisko i wczytuj go do napotkania " ", na trzecim rok urodzenia itd. - au7h 2019-06-11 00:45
no i z tego trzebaby zrobić listę, albo set czyli mapowanie do klas które mogą implementować interfejs serializable i używać writeObject, readObject - au7h 2019-06-11 00:49

Pozostało 580 znaków

2019-06-11 00:26
0

Jeżeli możesz zapisać te dane w formacie CSV, JSON czy czymkolwiek gdzie będziesz miał jasno określone co jest imieniem, nazwiskiem etc to twój problem się rozwiąże, inaczej będziesz musiał uwzględnić, że ktoś może miec 2 imiona, a i nazwisko może mieć więcej niż jedno słowo (nazwiska, które zawierają spacje)


Limitations are limitless

> ##### Ola Nordmann napisał(a)
> Moim językiem ojczystym jest C++ i proszę uszanować to, że piszę po polsku.

Pozostało 580 znaków

2019-06-11 00:38
0

Napisz parser.

Pozostało 580 znaków

2019-06-11 12:35
0

Pobierasz z pliku całą linię zapisując ją np. do zmiennej String line
Następnie dzielisz tą linię metodą split. Funkcja ta ma implementację przyjmującą w argumencie znak, który ma być separatorem poszczególnych łańcuchów znaków, a wynik zapisuje w tablicy, czyli:
line.split(" ")

Całość możesz wrzucić do listy, np:
List<String> wordList = new ArrayList<>(Arrays.asList(line.split(" ")))

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0