Java-kielen perusteet String-merkkijonoluokka 1
Ohjelmointikielten merkkijonot Merkkijonot ja niiden käsittely on välttämätöntä ohjelmoinnissa Valitettavasti ohjelmointikielten tekijät eivät tätä ole ottaneet huomioon, eli kieliin ei sisällytetä merkkijono-perustietotyyppiä Javassakaan ei ole perustietotyyppiä merkkijonolle Sen sijaan Javassa on String luokka, joka toimii merkkijonon tietotyyppinä 2
char -merkkityyppi Yksittäinen merkki on Javassa tyyppiä char Merkkityypin muuttujan esittely: char kirjain = 'B'; Merkkityyppi on käytännössä 8-bittinen positiivinen kokonaisluku, joka tulkitaan merkiksi Merkkityypin muuttujan voi myös esittää muodossa: char kirjain = 66;, jolloin lukuarvo tulkitaan ASCII-merkistön avulla kirjaimeksi 3
ASCII-merkistö ASCII on lyhenne sanoista American Standard Code for Information Interchange ASCII-merkistö on jäänteenä kääntäjissä, muissa ohjelmissa käytetään nykyään UNICODE-merkistöä ASCII-kartta sivulla: http://www.asciitable.com 4
String -merkkijonoluokka Java API:n kirjastosta löytyy merkkijonoja käsittelevä String - luokka Tarkka polku on java.lang.string String -luokka esittää usean merkin yhdistelmää eli merkkijonoa String -luokka sisältää metodeja merkkijonon käsittelyyn 5
String merkkijonoluokka jatkuu Merkkijonomuuttujan esittely: String mjono1 = Tämä on merkkijono ; String mjono2 = null; mjono1: Tämä on merkkijono Muuttujam mjono1 viittaa String-olioon, jonka arvo on Tämä on merkkijono mjono2: Muuttuja mjono2 ei viittaa mihinkään 6
String merkkijonoluokka jatkuu String-tyyppinen muuttuja viittaa String-luokan olioon, eli muuttuja viittaa ko. olioon Olion elinkaari alkaa, kun se luodaan yleensä new-lauseella String-luokka poikkeaa tässä muista luokista: String mjono1 = Tämä on merkkijono ; On sama kuin String mjono1 = new String ( Tämä on merkkijono ); 7
String merkkijonoluokka jatkuu Esim. String eka = "Moi!"; String toka = "Moi!"; eka: Toka: Moi Moi if ( eka == toka ) System.out.println( "Lieneekö samoja? ); toka = eka; if ( eka == toka ) System.out.println( "Onko samoja? ); eka: Toka: Moi Moi 8
String merkkijonoluokka jatkuu String-luokka sisältää metodeja String-olion sisällön muokkaamiseen String-olio voi kutsua em. metodeja, jolloin merkkijono muokkaus kohdistuu ko. olion sisältöön Metodia kutsutaan siten, että muuttujan, joka viittaa String-olioon, perään kirjoitetaan piste ja sen perään metodin nimi String nimi = anna ; Esim. nimi: anna String nimi = anna ; nimi = nimi.touppercase(); Kutsutaan: viestin saanut olio nimi = nimi.touppercase(); ANNA 9
String merkkijonoluokka jatkuu Esim. String eka = "Moi!"; String toka = "Moi!"; eka: Toka: Moi Moi if ( eka.equals(toka) ) System.out.println( Onko olioiden sisältö sama? ); char c = eka.charat(0); System.out.println( Merkkijonon ensimmäinen kirjain + on + c); tulostaa: Merkkijonon ensimmäinen kirjain on M 10
String luokan metodeita public int length() Metodi palauttaa viestin saaneen olion sisällön pituuden. Esim. String mjono = "Terve!"; viestin saanut olio System.out.println (mjono.length() + " on pituus " ); tulostuu: 6 on pituus 11
String luokan metodeita jatkuu public boolean equals ( Object olio ) Metodi vertaa viestin saaneen olion sisältöä parametrina olevan olion sisältöön. Jos olioiden sisällöt ovat täsmälleen samat, paluuarvo on true. Esim. Scanner input = new Scanner (System.in); System.out.println ("haluatko jatkaa (k/e)"); String vastaus = input.next(); while ( vastaus.equals ( "k" ) ) { System.out.println ("haluatko jatkaa (k/e)"); vastaus = input.next(); } 12
String luokan metodeita jatkuu public boolean equalsignorecase(string olio); Metodi toimii kuten edellinen equals-metodi, mutta se ei erottele pieniä ja isoja kirjaimia toisistaan. Esim. Scanner input = new Scanner (System.in); System.out.println("Anna nimesi:"); String nimi = input.next(); if ( nimi.equalsignorecase("liisa") ) System.out.println("nimesi on Liisa"); else System.out.println("nimesi ei ole Liisa"); 13
String luokan metodeita jatkuu public int compareto(string olio) Metodi vertaa viestin saaneen olion sisältöä parametrina olevan olion sisältöön. Metodi palauttaa arvonaan: <0: jos viestin saaneen olion sisältö on aakkosjärjestyksessä ennen parametrina olevan olion sisältöä >0: jos parametrina olevan olion sisältö on aakkosjärjestyksessä ennen viestin saaneen olion sisältö 0: jos olioiden sisällöt ovat samat. Ohjelmointi: I. Vilpponen, I. S. S. Lahtinen 14
String luokan metodeita jatkuu public int compareto(string olio) Esim. Scanner input = new Scanner (System.in); String eka=null, toka=null; System.out.println("Anna ensimmäinen sana:"); eka = input.next(); System.out.println("Anna toinen sana:"); toka = input.next(); if (eka.compareto(toka)>= 0) else System.out.println(toka + " ja " + eka + " ovat aakosjärjestyksessä"); System.out.println(eka + " ja " + toka + " ovat aakosjärjestyksessä"); 15 Ohjelmointi: I. Vilpponen, I. S. S. Lahtinen
String luokan metodeita jatkuu public int comparetoignorecase(string olio); Metodi toimii kuten edellinen compareto-metodi, mutta se ei erottele pieniä ja isoja kirjaimia toisistaan. 16
char charat(int index) String luokan metodeita jatkuu Metodi palauttaa arvonaan kohdassa indeksi olevan merkin viestin saaneen olion sisällössä (indeksointi nollasta alkaen kohtaan merkkijono.length()-1). Esim. String mjono = "Terve!"; System.out.print (mjono.charat(0)); System.out.print (mjono.charat(1)); System.out.print (mjono.charat(2)); System.out.print (mjono.charat(3)); System.out.println(mjono.charAt(mjono.length()-1)); Tulostaa: Terv! 17 Ohjelmointi: I. Vilpponen, I. S. S. Lahtinen
String luokan metodeita jatkuu public int indexof(int merkki); public int indexof(int merkki, int alkukohta); Metodi palauttaa arvonaan parametrin merkki paikan (indeksin) viestin saaneen olion sisällössä. Mikäli kyseistä merkkiä ei ole olion sisällössä, paluuarvona on 1. Jos parametriksi annetaan alkukohta, merkkiä etsitään olion sisällöstä lähtien indeksistä alkukohta String mjono = "TerVe!"; System.out.println ( mjono.indexof ( 'V' )) ; System.out.println ( mjono.indexof ( 'e', 2 )) ; tulostuu: 3 Ohjelmointi: I. Vilpponen, I. S. S. Lahtinen 4 18
String luokan metodeita jatkuu int indexof(string str) int indexof(string str, int alkukohta) Metodi palauttaa arvonaan parametrina olevan merkkijonon (str) alkuindeksin viestin saaneen olion sisällössä. Mikäli merkkijonoa ei löydy, paluuarvona on 1. Jos parametrina annetaan alkukohta, merkkijonoa etsitään sisällöstä lähtien indeksistä alkukohta String mjono = "Terve Terve!"; System.out.println(mjono.indexOf(" Terve")); System.out.println(mjono.indexOf("Terve",1 )); tulostuu: 5 6 19
String luokan metodeita jatkuu public String trim(); Metodi palauttaa String-olion, jonka sisältö on kopio viestin saaneen olion sisällöstä siten, että kopion alusta ja lopusta on poistettu välilyönnit String tervehdys = " Moi Pate! "; tervehdys = tervehdys.trim(); System.out.println(tervehdys); Tulostuu: Moi Pate! 20
String luokan metodeita jatkuu public String substring (int alku) Metodi palauttaa String-olion, jonka sisältö on kopio viestin saaneen olion sisällön kohdasta/indeksistä alku alkaen sisällön loppuun. String hello = Moi maailma!"; hello = hello.substring (4); System.out.println( hello); Tulostuu: maailma! 21
String luokan metodeita jatkuu public String susbtring (int alku, int loppu) Metodi palauttaa String-olion, jonka sisältö on kopio viestin saaneen olion sisällön kohdasta/indeksistä alku alkaen kohtaan /indeksiin loppu-1. String hello = "Moi maailma!"; hello= hello.substring(0,3); System.out.println(hello); Tulostuu: Moi 22
String luokan metodeita jatkuu public String touppercase(); public String tolowercase(); Metodi tolowercase kopioi viestin saaneen olion sisällön uuden olion sisällöksi ja muuttaa kaikki kirjaimet pieniksi. Metodi touppercase kopioi viestin saaneen olion sisällön uuden olion sisällöksi ja muuttaa kaikki kirjaimet suuriksi. String hello = new String("Moi Maailma 2012!"); String mjono1 = hello.touppercase(); String mjono2 = hello.tolowercase(); System.out.println( mjono1 +"\n" + mjono2); tulostuu: MOI MAAILMA 2012! Ohjelmointi: I. Vilpponen, I. S. S. Lahtinen moi maailman 2012! 23
Merkkijonomuunnokset, numeerinen tieto merkkijonoksi Numeerisen tiedon muuttaminen merkkijonoksi tehdään sijoituslauseella siten, että sijoitettavassa lausekkeessa tulee olla vähintään yksi merkkijono, joka liitetään +-operaatiolla numeeriseen tietoon. String mluku; double luku = 4.56; mluku = "" + luku; System.out.println(mluku); tulostuu: 4.56 mluku = luku +" on desimaaliluku"; System.out.println(mluku); tulostuu: 4.56 on desimaaliluku 24