Pracuję nad następującym zadaniem:
Daty w pliku tekstowym o nazwie{user.home}/test/daty.txt maja postać YYYY-MM-DD (rok- miesiąc- dzień). Oprócz dat, plik zawiera inne informacje. Wczytać plik i wypisać w jednym wierszu wszystkie poprawne daty - czyli: po wyróżnieniu wszystkich fragmentów, które mogą być datami sprawdzić ich poprawność (np. czy właściwa jest liczba dni w miesiącu)
Program powinien w specyficzny sposób traktować niejednoznaczną informację (np. 2009-01-111 - czy to błędna data czy potraktować ją jako 2009-01-11).
Sposób traktowania takich sytuacji wyjaśnia poniższy przykład.
Dane w pliku:
2007-01-12Jakis txt2008-01-31 xxx 2008-02-29 2008-15-10 2008-19-45 2009-05-01
20999-11-11 pppp 2001-00-01 09-01-01 2001-01-00 2009-01-111 2009-02-29 1998-11-11
Program powinien wyprowadzić:
2007-01-12
2008-01-31
2008-02-29
2009-05-01
1998-11-11
Zalecenia: użyć skanera, wyrażeń regularnych (ale same wyrażenia reg. nie wystarczą).
Póki co usunąłem pojawianie się błędnych dat poza jedną (pogrubioną wyżej) i uzyskuję taki zapis:
2007-01-12
2008-01-31
2008-02-29
2009-05-01
2009-02-29
1998-11-11
Nie wiem jak sprawić, by mój kod odsiewał niewłaściwe daty jak 2009-02-29, czy inne niezgodne z kalendarzem.
Póki co użyłem matchera by uzyskać właściwe daty, oraz za pomocą właściwego regex'a usunąłem inne zbędne dla wzoru odpowiedzi daty.