Lisää harjoitusta vieläkin Ohjelmoinnin perusteiden hengessä...
Luokassa String on monenlaisia välineitä merkkijonojen käsittelyyn. Kerran luotu String-olio tunnetusti ei kuitenkaan voi koskaan muuttua, ne ovat kerran synnyttyään muuttumattomia, "immutaabeleita". Ohjelmoi ja testaa oma merkkijonoluokka OmaString muutettavien merkkijononojen toteutukseksi. Tehtävän ratkaisemisessa on pyrittävä välttämään roskienkerääjän ylensyöttämistä. Itse asiassa Java-APIssa on olemassa luokat StringBuilder ja StringBuffer muutettavien merkkijonojen käsittelyyn, mutta asioiden tekeminen omin käsin on opettavaista!
Luokan OmaString määrittely alkaa:
public class OmaString { public static final int MAKSIMIPITUUS = 100; // pisin mahdollinen merkkijono // ("final" tarkoittaa vakiota); // tätä voi kysyä luokan ulkopuolelta // OmaString.MAKSIMIPITUUS private char[] mjono; // merkkijononon esitys char-taulukkona private int pituus; // montako alkioita mjono:n alusta on käytössä ...Luokassa on konstruktorit:
Lisävihje ja -ohje (19.11.): Huomaa että aina luodaan taulukko, jonka koko on MAKSIMIPITUUS! Taulukko-oliota ei tässä tehtävässä koskaan vaihdeta esimerkiksi suuremmaksi!
Luokka tarjoaa aksessorit:
Kirjoita pääohjelma, joka esittelee monipuolisesti OmaString-olioiden käyttöä.
Huom: Poiketen String luokan metodista riittää,
että tämä compareTo-metodi palauttaa arvon -1, 0 tai 1.
Huom:
Jälkimmäinen indexOf-metodi etsii this-OmaString-oliosta
parametrina annettua OmaString-oliota.
Kirjoita pääohjelma, joka esittelee monipuolisesti näiden laajennettujen OmaString-olioiden käyttöä.
java Ohjelma < tiedostoSamoin ohjelman tulosteet voidaan ohjata tiedostoon kuvaruudun sijasta:
java Ohjelma > tiedostoMyös molemmat voidaan tehdä:
java Ohjelma < tiedosto1 > tiedosto2
Laadi ohjelma Humanisoi, joka tekee syöttötiedostosta sellaisen kopion, jossa jokainen numeromerkki on korvattu merkillä '*'. Ohjelma suoritetaan komennolla:
java Humanisoi < teksti.txt > humanoitu.txt
Vihjeitä
while (lukija.hasNextLine()) { String rivi = lukija.nextLine(); // ... käsittele yksi rivi }