Java:Sõne

Allikas: Kursused
Redaktsioon seisuga 14. veebruar 2015, kell 09:19 kasutajalt Ago (arutelu | kaastöö)
Mine navigeerimisribale Mine otsikasti

Sõne (ik string) on sümbolite kogum. Sõnest võib mõelda kui tähtede (või üldisemalt sümbolite) massiivist. Sõne on Java keeles objekt, mis tähendab, et tema kohta kehtivad natuke teised reeglid kui primitiivsete andmetüüpide kohta.

Sõne tüüpi muutuja loomine:

String s;

Muutuja loomisel võib sellele ka sisu anda:

String s = "tere";

Lisaks tekstilisele väärtusele võib väärtuseks olla ka null:

String s = null;

null tähendab objektide puhul seda, et antud objekt on väärtustamata. Kui me allpool vaatleme String'i meetodeid, siis kui meie vaadeldava objekti väärtus on null, siis ükski allpool toodud meetod ei tööta - käivitamisel antakse veateade.

Meetodid

length()

Tagastab sõne pikkuse (mitu sümbolit on sõnes).

System.out.println("tere".length()); // prindib "4"
System.out.println("".length()); // prindib "0"

charAt

Võimaldab sõnest leida ühe sümboli vastavalt ette antud indeksile. See töötab sarnaselt nagu massiivide puhul. Indeks hakkab 0-st, st esimese elemendi index on 0. Meetod tagastab andmetüübina char ehk ühe sümboli.

char c = "tere".charAt(0); // c = 't'
c = "tere".charAt(1); // c = 'e'

substring

Võimaldab sõnest alamosa võtta. Samanimelist meetodit on kaks: üks on ühe argumendiga, teine on kahe argumendiga.

Ühe argumendiga meetod tagastab alamsõne, mille algus on ette antud indeksiga positsioonist ning mille lõpp on algse sõne lõpp.

System.out.println("tere".substring(1)); // prindib "ere"
System.out.println("tere".substring(3)); // prindib "e"

Kahe argumendiga meetod tagastab alamsõne, mille algus on esimese argumendiga määratud indeksiga positsioonist ning mille lõpp on teise argumendiga määratud indeksiga positsioonist eelmine positsioon. Ehk siis alguse positsioon on kaasa arvatud, lõpu oma ei ole kaasa arvatud.

System.out.println("tere".substring(1,3)); // prindib "er"
System.out.println("tere".substring(3,4)); // prindib "e"

indexOf

Otsib sõnest etteantud (alam)sõne ja tagastab positsiooni, kust otsitav (alam)sõne leiti. Kui otsitavat (alam)sõne ei leita, tagastab -1.

System.out.println("tere".indexOf("t")); // prindib "0"
System.out.println("tere".indexOf("te")); // prindib "0"
System.out.println("tere".indexOf("re")); // prindib "2"
System.out.println("tere".indexOf("a")); // prindib "-1"

Kasutada on võimalik ka kahe argumendiga meetodit. Teine argument näitab ära, alates mis positsioonist otsima hakata.

System.out.println("tere".indexOf("t", 0)); // prindib "0"
System.out.println("tere".indexOf("t", 1)); // prindib "-1", kuna "t" ei leidu, kui hakata otsima alates positsioonist 1 (ehk siis teisest tähest)
System.out.println("tere".indexOf("e", 1)); // prindib "1"
System.out.println("tere".indexOf("e", 2)); // prindib "3", kui hakata positsioonist 2 otsima, leidub esimene "e" positsioonil 3

Sõnede võrlemine

Kui me näiteks int tüüpi muutuja väärtust saime kontrollida selliselt:

<source lang="java"> int x = 3; if (x == 3) {

   // do something

} </source>

siis sõnede puhul == võrdlus ei anna päris õiget tulemust. Kui te kasutate == võrdlust, annab see teile küll näiliselt õige tulemuse 90% juhtudest. Sisuliselt on sellel aga teine tähendus. Etteruttavalt olgu mainitud, et == võrdleb objektide puhul seda, kas nad on täpselt sama instants. Täpsemalt kirjeldatakse seda objektide juures.

Meid huvitab kontrollimisel see, kas sisu (ehk väärtus) on sama. Selleks kasutatakse meetodit equals:

<source lang="java"> if (s.equals("tere")) {

   // do something

} </source>

Sõne andmetüüp mälus

Sõne andmetüüpi muutuja hoiab lihtsustatult öeldes mäluaadressi, kus sõne väärtus paikneb. Ehk siis String s = "tere"; tähendab seda, et s hoiab näiteks väärtust 42 (positsioon mälus). Mälus sellel positsioonil paikneb sõne väärtus ja muu info. Mälus hoitakse lisaks "tere"-le veel näiteks sõne pikkust. Seega, näiteks s.length() ei loe sõne sümboleid kokku, vaid see info on juba mälus ja mingit arvutust ei toimu.

Iga sümbol sõnes kulutab 2 baiti mälu. Isegi, kui hoiate sõnes ASCII tabelisse kuuluvaid sümboleid, mille esitamiseks tegelikult piisab ühest baidist.

Vt. objektid mälus (TODO).

null väärtus

TODO