student
   

Program II - Cenzor

Ogólnie:
Klasa FilterWriter jest abstrakcyjną klasą służącą jako klasa bazowa dla klas filtrujących strumienie znaków. Opakowuje ona strumień typu Writer ((przechowując jego referencję w swoim polu out), do którego (po odpowiednim przefiltrowaniu, jeśli potrzeba) przekazuje dane. Sama też jest klasą pochodną po klasie Writer w związku z tym może być używana wszędzie tam gdzie wymagane są referencje do klasy bazowej. Dzięki temu możemy takie filtry składać w ciąg, na przykład:
FilterWriter2 w = new FilterWriter2(new FilterWriter1(new FilterWriter(""plik.txt")));

W przykładzie tym zapisując do obiektu (strumienia) klasy FilterWriter2 filtrujemy tam dane i przekazujemy je do obiektu klasy FilterWriter1, który to obiekt znów je filtruje... . Aby napisać własny filtr wystarczy przesłonić odpowiednie metody write, które dokonują filtracji znaków i przekazują je dalej opakowywanemu strumieniowi. Można też dodać własne metody rozszerzając funkcjonalność takich klas. Powyższe uwagi nie odnoszą się tylko do klasy FilterWriter ale też do innych klas filtrujących: FilterReader, FilterOutputStream, FilterImputStream z których dziedziczą już standardowe klasy takie jak: BufferedOutputStream, BufferedInputStream itp. .

Zadanie:
Składa się z następujących części:
  1. Napisać program (poczynając od pustego projektu), który w funkcji main będzie czytał linijka po linijce dane ze standardowego wejścia i wypisywał je na standardowe wyjście (echo:)).
  2. Do powyższego programu dodać klasę pochodną po FilterWriter, której zadaniem będzie filtracja strumienia znaków w ten sposób, aby zmieniał on wszystkie napotkane litery 'a' na literę 'b' oraz użyć jej przy wypisywaniu znaków na standardowe wyjście (dodając do ciągu klas opakowujących strumień wyjściowy)
    Przykładowy wygląd ekranu:
    askksa
    bskksb
    alskdaasks
    blskdbbsks
    Wskazówka: przesłonić konstruktor (aby wywołać konstruktor klasy bazowej) i metody write.
  3. Zmienić powyższą klasę tak, aby użytkownik mógł podać do konstruktora, jak znak zamienić, na jaki inny w czasie filtracji.
  4. Zmienić powyższą klasę tak, aby użytkownik tej klasy mógł podać do konstruktora nazwę pliku gdzie linijka po linijce będzie wyszczególnione, jaki znak zamienić, na jaki(możliwa większa ilość zmian). W każdej linijce tego pliku będą znajdować się dwa znaki(odpowiednio początkowy i docelowy). Wystarczy założyć, że dane w pliku są poprawne i nie trzeba tego sprawdzać.
    Wskazówka: do przechowywania znaków użyć standardowych klas np. Vector lub StringBuffer.
 

Konsultacje  

Ważne info:
Koło algorytmiczne
spotkania w PON o 12.00h sala sanów

Ważne info:
Zawody algorytmiczne
już 28 października 2005 - jedź z nami!

Chcę otrzymywać newsy:
Podaj swój mail:

 

 


student site & engine by DONE

 

wszelkie pytania proszę kierować pod adres r.papis@done.pl
 

 

DONE