Merkkijono alkaa ja loppuu lainausmerkkeihin ja se saa sisältää mitä tahansa merkkejä. Kenoviivalle \ on varattu erityismerkitys, kuten rivinvaihto tai sivunvaihto. Taulukoon 2 on kerätty kenoviivamerkit.
Taulukko 2. Kenoviivamerkit
rivi jatkuu |
\ |
rivin vaihto |
\n |
vertikaalinen tabulointi |
\t |
askelpalautin BS |
\b |
siirtyminen rivin alkuun CR |
\r |
sivun vaihto |
\f |
kenoviiva |
\\ |
heittomerkki |
\' |
lainausmerkki |
\" |
oktaaliluku |
\ddd |
heksaluku |
\xdd |
merkki (unicode) |
\udddd |
Esimerkki 7
public class e7
{
public static void main (String args[])
{
System.out.println("Perustietotyyppejä ovat mm. :\n\tint\n\tbyte"); // heksaluku \u:ssa
System.out.println("\\u muotoilua voi käyttää vaikka seuraavasti :\u0171"); // ½ -merkki
}
}
Oheisella pienellä ohjelmalla voi tutkia niitä unicode –koodin osia, joita oma koneesi tukee. Huomaa, että 256:sta alkaen kone tulostaa ? –merkkiä koska ei tunne tulostettavaa koodia (win95) (Kone tulostaa itse asiassa laajennettua ascii-merkistöä. Ota tämä huomioon seuraavissa tehtävissä). Jos sinulla on Win NT4.0, jossa unicode asennettuna, niin saat kaikki merkit näkyville.
public class e7a
{
public static void main (String args[])
{
int i;
for (i=50; i<270; i++)
System.out.print(i+":s merkki "+(char)i + " ");
}
}
Merkkijonot ovat Javassa olioita. Tästä ei suinkaan tarvitse säikähtää, koska olioiden käsittely on itse asiassa paljon helpompaa kuin esimerkiksi Pascal –kielen merkkijonojen käsittely.
Merkkijono muodostetaan String –luokalla. Tulostettaessa annetaan System.out luokan println metodille parametriksi String –olio. String –luokka sisältää myös kaikki keskeiset merkkijonojen käsittelyyn tarvittavat metodit. Palaamme niihin hetken kuluttua. Seuraavaan taulukkoon on listattu lyhyesti terminologiaa
Luokka | Esimerkiksi String. Kaikki merrkijonot kuuluvat luokkaan String |
Olio | Luokan instanssi eli olio.
Esimerkiksi String säätila; tarkoittaa luokasta String muodostettu olio, jolle annetaan nimi säätila tai Luokan String instanssi, jolle annetaan nimi säätila |
Metodi | Luokkaan kirjoitettu metodi, jolla
voidaan tehdä jotain luokkaan liittyvää. Esimerkiksi Luokan String olion
säätila ominaisuus on jonossa olevien merkkien määrä eli jonon pituus
(length) ja metodia käytettäisiin seuraavasti: jono.length(); |
Toinen esimerkki oliosta. Olio kuuluu aina tiettyyn luokkaan. Olkoot luokan nimi vaikkapa koululainen. Luokka muodostetaan komennolla
class koululainen { };
Tämän jälkeen muodostetaan luokkaan koululainen kuuluvat oliot oppilas1 ja oppilas2 seuraavasti. (Yksinkertaistaen, new –alustus on jätetty pois)
koululainen oppilas1, oppilas2; \\(Vertaa. int i1,i2;)
Jos luokkaan koululainen tehtäisiin metodit lisaaEtunimi() ja lisaaSukunimi(), tapahtuisi nimen lisäys seuraavasti
oppilas1.lisaaEtunimi("Matti");
oppilas1.lisaaSukunimi("Mainio");
oppilas2.lisaaEtunimi("Jussi");
oppilas2.lisaaSukunimi("Juonio");
Yleinen muoto on siis (parametrilista riippuu käytetystä metodista ja siihen palataan tarkemmin seuraavalla kurssilla)
olio.metodi(parametrilista);
Joitain String –luokan metodeja ja muita merkkijonojen ominaisuuksia on esitelty seuraavassa esimerkissä. Huomaa erityisesti kahden merkkijonon yhdistäminen + merkillä. Tätä ominaisuuttahan on jo käytetty edellisissä esimerkeissä.
Esimerkki 8.
public class e8
{
public static void main
(String args[])
{
String jono,
jono1, jono2; // String kirjoitetaan
isolla!!!!
jono1 = "Olen merkkijono";
System.out.println(jono1);
jono2 = "Olen toinen merkkijono";
System.out.println(jono2);
jono="Yhdistetty jono " + jono1 + jono2; //
Liitetään vakiojono ja muuttujat jono1 ja
jono2
System.out.println(jono);
// kokeillaan eri
metodeja
jono = "abcdef"; // nyt edellinen
muistipaikan sisältö katosi
System.out.println(jono.charAt(2)); // charAt –metodi palauttaa merkin c.
Tarkista
// menikö
oikein?
System.out.println(jono1.compareTo(jono2));
// compareTo –metodi vertaa jono1 jonoon 2
// Mikä
on tuloksen tyyppi?
System.out.println(jono1.concat("Lisää merkkejä"));// concat –metodi tekee saman
kuin
// + operaatio
System.out.println(jono.equals("abcdef")); // ovatko merkkijonot
samoja?
System.out.println(jono1.length()); //
length() –metodi palauttaa merkkijonon pituuden
jono1 = "aBcDeFgH";
System.out.println(jono1.toLowerCase()); // Kirjaimet
pieniksi
System.out.println(jono1.toUpperCase()); //
Kirjaimet isoiksi
}
} // Lisäksi on olemassa ainakin replace
ja toCharArray –metodit (kts. seuraava
kpl).
Merkkijonon ensimmäinen alkio charAt() –metodissa on paikassa 0 !
jono = jono.substring(8);
jono.substring(8);?
Kun katsot tarkemmin JDK:n ohjetta esimerkiksi luokan String kohdalla, löytyy metodit
sekä
ja toisaalta
Vasemmalla olevat sanat int, boolean ja void kertovat, millaisen paluuarvon metodit palauttavat. Koska length()-metodi palauttaa dokumentoinnin mukaan arvon, jonka tyyppi on int, niin silloin pitää kirjoittaa esimerkiksi
String jono = "Joskus haluaa päästä rantaan ja nähdä riveissä seisovat nosturit ";
int pituus = jono.length();
System.out.println("Merkki jonon \""+jono+"\" pituus on "+pituus);
tai koska equalsIgnoreCase()-metodi palauttaa arvon tyyppiä boolean, voidaan kirjoittaa
String jono1 = "Komannen asteen polynomin derivaatta";
String jono2 = "KOLMANNEN ASTEEN POLYNOMIN DERIVAATTA";
boolean onkoTotta = jono1.equalsIgnoreCase(jono2);
Jos paluuarvona on void (= ei mitään), kirjoitetaan
String jono1 = "Linssiyhtälön ratkaisu esineen paikan a suhteen";
jono1.getBytes(3,6,...,5); // kutsusta on jätetty tässä vaiheessa opintoja epäoleellinen pois
Siis
Jos paluuarvo on muu kuin void, joudutaan laittamaan sijoituslause =