OO praktikum - 12.03.1999
Sõnetöötlus
Traditsioonilised struktuursed programmeerimiskeeled (Basic, C,
Pascal
jne.) esitavad sõne (ingl.k. string) kui andmetüüpi.
Programmeerija võib sõnega manipuleerida, nii kuidas talle
mugavam on (klassikalised programmivead on seotud C-keele ja '\0'
sümboliga, mis tähistab sõne lõppu).
Mõningates objektorienteeritud keeltes (nt. C++, Java)
on sõne realiseeritud objektina. See tagab selle, et sõnega
opereerimine toimub ainult läbi nende meetodite, mida sõneklass
võimaldab.
Java sisaldab sõnedega opereerimise jaoks kaks põhilist
klassi String ja StringBuffer, sõnede sõelumise
(ingl.k. parsing) jaoks on olemas ka klass StringTokenizer.
Klass
String on mõeldud eelkõige konstantsete sõnede
jaoks (töö käigus klassi String kuuluvaid objekte
muuta ei saa), klass
StringBuffer aga nende sõnede jaoks,
mis võivad muutuda.
Alljärgnevalt on kirjeldatud nende kolme klassi meetodeid, täpsemalt
saab igaüks ise API (ingl. k. Application Programming
Interface) kirjeldusest järele vaadata.
java.lang.String
API kirjeldab üksteist klassi String konstruktorit.
Suuremat osa neist enamus juhtudel vaja ei lähe, küll aga oleks
kasulik nendega hariduse mõttes tutvuda. Meetodid:
-
charAt
-
compareTo
-
concat
-
copyValueOf
-
endsWith
-
equals
-
equalsIgnoreCase
-
getBytes
-
getChars
-
hashCode
-
indexOf
-
intern
-
lastIndexOf
-
length
-
regionMatches
-
replace
-
startsWith
-
substring
-
toCharArray
-
toLowerCase
-
toUpperCase
-
trim
-
valueOf
NB! Erilist tähelepanu tuleks pöörata meetoditele
equals, compareTo ja valueOf.
java.lang.StringBuffer
API kirjeldab kolme klassi StringBuffer konstruktorit.
Meetodid:
-
append
-
capacity
-
charAt
-
ensureCapacity
-
getChars
-
insert
-
length
-
reverse
-
setCharAt
-
setLength
-
toString
java.util.StringTokenizer
API kirjeldab kolme klassi StringTokenizer konstruktorit.
Meetodid:
-
countTokens
-
hasMoreElements
-
hasMoreTokens
-
nextElement
-
nextToken
Ülesanded
-
Tutvuda näiteprogrammi StringTest.java
tekstiga. Proovida iseseisvalt kasutada ka suuremat osa klasside StringBuffer
ja StringTokenizer meetoditest.
-
Realiseerida klass, millel on meetod, mis saab parameetriks String-tüüpi
objekti ja töötleb seda järgnevalt:
-
jagab parameetriks saadud sõne osadeks, mis on üksteisest eraldatud
kooloniga (':');
-
interpreteerib iga eelmisel sammul saadud osa kui paari ees- ja perekonnanimest,
mis on kujul <tühemikud><eesnimi><tühemikud><perekonnanimi><tühemikud>,
kus tühemik (ingl.k. whitespace) on suvaline prindis tühja
kohana esitatav märk (tühik, tabulaator, reavahetus jne.);
-
viib iga osa kujule <perekonnanimi><tühik><eesnimi>,
kus ees- ja perekonnanimi algavad suurtähega, ülejäänud
tähed on väikesed;
-
väljastab selle osa;
-
kui <perekonnanimi><tühik><eesnimi> on palindroom
(tagurpidi loetuna sama, mis õigetpidi loetuna, kusjuures võrdlemisel
suur- ja väiketähti ei eristata), siis väljastab samale
reale lisaks sõne ' - palindroom';
-
iga osa tuleb esitada eraldi real.
Näidislahendus: kui parameetriks on sõne
"·TooMas·viIRSAlu:····gunNAr·kuDRJAVets·:·uRMET·Liin·····:···AIas·Saia····:···tARgo···teNNISBerg·:···aHTo···trUu··"
, siis peab programm väljastama teksti:
Viirsalu·Toomas
Kudrjavets·Gunnar
Liin·Urmet
Saia·Aias·-·palindroom
Tennisberg·Targo
Truu·Ahto
NB! Ülesande lahendamisel tasuks püüelda modulaarsuse
suunas - iga alamülesande lahendamise jaoks on mõttekas luua
eraldi klass või meetod, mida oleks võimalik kasutada teiste
sarnaste ülesannete lahendamisel.
Gunnar Kudrjavets [gk@aprote.ee]
Tõravere, 10.03.1999