ALOITTELIJAN JAVA-OPAS


7. Merkkijonojen käsittely

7.1 Merkkijonot

Javassa on valmiina peruskirjasto merkkijonojen käsittelyä varten. Se sisältää kaikki tarpeelliset perustoiminnot merkkijonojen operointiin. Uusi merkkijono muodostetaan laittamalla teksti lainausmerkkien sisään. String-luokassa voi käyttää new-operaattoria merkkijonon muodostamiseen, mutta sen voi muiden olioiden luomisesta poiketen jättää myös pois:
	String merkkijono = new String("merkkijonojen luominen on helppoa");
	String merkkijono = "Merkkijonojen luominen on helppoa"; 
Kaksi merkkijonoa voidaan yhdistää toisiinsa käyttämällä +-operaattoria :
	String nimi = "Jussi";
	String ika = "22";

	String lause = nimi + " on " + ika + " vuotta vanha";

	Merkkijono lause on nyt "Jussi on 22 vuotta vanha".
Muista kielistä poiketen Javan merkkijonoja ei voida käsitellä kuin kaksiulotteista taulukkoa. Jos halutaan esimerkiksi päästä käsiksi merkkijonon kuudenteen merkkiin, tulee käyttää charAt-metodia:
	char jonon_kuudes_merkki = mjonon.charAt(5);
Merkkijonon pituus saadaan helposti selville length-metodilla:
	Int merkkijonon_pituus = mjono.length();
Merkkijonon kaikki merkit voidaan muuttaa joko isoiksi tai pieniksi kirjaimiksi metodeilla toUpperCase ja toLowerCase. Luvut (esim. int, double) voidaan muuttaa merkkijonoiksi metodilla toString.
	String jono = "Hello World";
	jono.toUpperCase(); // jono on "HELLO WORLD"
	jono.toLowerCase(); // jono on "hello world"
Merkkijonon tiettyjen merkkien vaihtaminen toisiksi merkeiksi onnistuu replace-metodilla. Metodille annetaan parametreiksi ensin korvattava merkki ja sitten korvaava merkki.
	String mjono = "Java";
	mjono.replace('J', 'C'); //mjono on nyt "Cava"
Eräs pulma String-olioiden käsittelyssä on se, että kahta merkkijonoa ei voida suoraan verrata toisiinsa käyttämällä yhtäsuuruusoperaattoria (==). Merkkijonojen vertailu täytyy suorittaa compareTo-medodilla:
	merkkijono1.compareTo(merkkijono2);
Jos merkkijono1 ja merkkijono2 ovat samat, palauttaa compareTo arvon nolla. Jos merkkijono1 on aakkosjärjestyksessä ennen merkkijono2:ta, palautuu negatiivinen kokonaisluku ja jos merkkijono2 on aakkosjärjestykesessä ennen merkkijono1:tä, palautuu positiivinen kokonaisluku.

Toinen tapa toteuttaa kahden merkkijonon vertaamista toisiinsa on käyttää equals-metodia:
	 merkkijono1.equals(merkkijono2)
Equals-metodi palauttaa arvon true jos merkkijonot ovat samat ja arvon false jos merkkijonot eriävät toisistaan. Equals-metodi eroaa compareTo-metodista siinä, että isot ja pienet kirjaimet katsotaan samoiksi. Palautusarvon tyypin vuoksi metodia on helppo käyttää erilaisissa ehtolauseissa.

7.2 StringBuffer-luokka

String luokan ongelmana on se, että merkkijonoon ei voida lisätä merkkejä jälkikäteen. Ongelman voidaan ratkaista käyttämällä StringBuffer-luokkaa. Stringbuffer-luokan olioiden tulostaminen ei taas onnistu normaalisti, vaan olio täytyy ensin muuttaa merkkijonoksi toString-metodilla. Jos merkkijonon loppuun halutaan lisätä merkkejä, onnistuu se append-metodilla. Jos merkkejä halutaan lisätä alkuun tai keskellä, käytetään metodia insert.
	StringBuffer lause = new StringBuffer ("Javalla on helppo ");
	lause.append("ohjelmoida");
	lause.insert(0, "Myöskin ");

	Merkkijono lause on nyt "Myöskin Javalla on helppo ohjelmoida"
Kokonainen merkkijono voidaan kääntää käyttämällä reverse-metodia:
	StringBuffer mjono = new StringBuffer("Java");
	mjono.reverse(); //mjono on nyt "avaJ"

7.3 StringTokenizer-luokka

Joskus voi olla tarvetta jakaa merkkijono useaan osaan. Tätä varten Javasta löytyy StringTokenizer-luokka. Merkkijonon osat erotetaan erotinmerkillä, joka määritellään StringTokenizer-luokan alustajassa. Erotinmerkki voi olla vaikkapa pilkku, piste tai tabulaattori. Merkkijonon läpikäymiseen tarvitaan kahta metodia : hasMoreTokens testaa onko merkkijonon osia vielä jäljellä ja nextToken ottaa merkkijonon seuraavan osan käsittelyyn. Tarvittaessa metodilla countTokens voidaan pitää kirjaa osien lukumäärästä. Seuraavassa esimerkissä nettiosoite www.cs.joensuu.fi pilkotaan osiin. Erotinmerkkinä on tässä tapauksessa piste.
	String osoite = "www.cs.joensuu.fi"
	StringTokenizer pilkottu_merkkijono = new StringTokenizer(osoite, ".");
 	 //määritellään erotinmerkki
	Int osien_lkm = pilkottu_merkkijono.countTokens();

	while (pilkottu_merkkijono.hasMoreTokens()) {
	  String pala = pilkottu_merkkijono.nextToken();

	  System.out.println("osa: " + pala);
	}

	System.out.println("Merkkijono oli jaettu " + osien_lkm + " osaan");


	Ohjelma tulostaa seuraavaa:

	osa:www
	osa:cs
	osa:joensuu
	osa:fi

	Merkkijono oli jaettu 4 osaan


Tietojärjestelmien dokumentointi 2005 | Aloittelijan JAVA-opas


Valid CSS!