Merkkijonon tietotyyppi String
on tullut tutuksi jo aiemmissa
luvuissa. Tämän lisäksi Javassa on tietotyyppi char
, joka vastaa
yhtä merkkiä. Seuraava koodi määrittelee ja tulostaa
char
-muuttujan:
char merkki = 'A'; System.out.println(merkki);
Ohjelman tulostus on seuraava:
A
Erona String
-muuttujaan verrattuna
char
-muuttujassa on aina tasan yksi merkki, joka kirjoitetaan
heittomerkkien (') sisään.
Merkkijonoon liittyvät seuraavat tärkeät komennot:
length
kertoo merkkijonon pituuden (merkkien määrän).
charAt
kertoo tietyssä kohdassa olevan merkin.
Esimerkiksi merkkijono "testi" on muistissa seuraavasti:
kohta | 0 | 1 | 2 | 3 | 4 |
---|---|---|---|---|---|
merkki | t | e | s | t | i |
Seuraava ohjelma esittelee komentojen käyttöä:
System.out.print("Anna merkkijono: "); String merkkijono = input.nextLine(); int pituus = merkkijono.length(); System.out.println("Pituus: " + pituus); char eka = merkkijono.charAt(0); System.out.println("1. merkki: " + eka); char kolmas = merkkijono.charAt(2); System.out.println("3. merkki: " + kolmas); System.out.println("Kaikki merkit:"); for (int i = 0; i < merkkijono.length(); i++) { char merkki = merkkijono.charAt(i); System.out.println("Kohdassa " + i + " on merkki " + merkki); }
Ohjelman tulostus voi olla seuraava:
Anna merkkijono: testi Pituus: 5 1. merkki: t 3. merkki: s Kaikki merkit: Kohdassa 0 on merkki t Kohdassa 1 on merkki e Kohdassa 2 on merkki s Kohdassa 3 on merkki t Kohdassa 4 on merkki i
Komennolla substring
pystyy erottamaan osan merkkijonosta.
Komentoa voi käyttää kahdella tavalla:
substring(alku)
erottaa merkit kohdasta alku
merkkijonon loppuun asti.
substring(alku, loppu)
erottaa merkit kohdasta
alku
kohtaan loppu-1
asti.
Seuraavassa esimerkissä merkkijono on muistissa näin:
kohta | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|---|
merkki | e | s | i | m | e | r | k | k | i |
Erotetaan merkkijonosta kaksi osaa:
String merkkijono = "esimerkki"; String osa1 = merkkijono.substring(3); System.out.println(osa1); String osa2 = merkkijono.substring(2, 7); System.out.println(osa2);
Ohjelman tulostus on seuraava:
merkki imerk
Huomaa komennon erikoinen toiminta, kun lopetuskohta annetaan: viimeinen mukaan tuleva merkki on yksi merkki ennen lopetuskohtaa!
Komento indexOf
etsii kohdan, jossa merkkijonon osana on tietty
merkki tai merkkijono. Jos kohtia on useita, komento kertoo ensimmäisen kohdan.
Jos yhtään kohtaa ei ole, komento tuottaa arvon -1.
Seuraava ohjelma hakee merkkijonosta "esimerkki" käyttäjän antamaa merkkijonoa.
String merkkijono = "esimerkki"; System.out.print("Anna haettava merkkijono: "); String haettava = input.nextLine(); int kohta = merkkijono.indexOf(haettava); if (kohta == -1) { System.out.println("Haettavaa merkkijonoa ei ole"); } else { System.out.println("Haettava merkkijono alkaa kohdassa " + kohta); }
Esimerkkitulostuksia:
Anna haettava merkkijono: merkki Haettava merkkijono alkaa kohdassa 3
Anna haettava merkkijono: testi Haettavaa merkkijonoa ei ole
Javassa jokaista merkkiä vastaa merkkikoodi, joka on kokonaisluku.
Esimerkiksi merkkiä 'A' vastaa merkkikoodi 65. Niinpä char
-arvolla
on kaksi vaihtoehtoista merkintätapaa: merkkiesitys ja koodiesitys.
Seuraavassa taulukossa on osa Javan merkistöstä merkkikoodeineen:
33 ! 34 " 35 # 36 $ 37 % 38 & 39 ' 40 ( 41 ) 42 * 43 + 44 , 45 - 46 . 47 / 48 0 49 1 50 2 51 3 52 4 53 5 54 6 55 7 56 8 57 9 58 : 59 ; 60 < 61 = 62 > 63 ? 64 @ 65 A 66 B 67 C 68 D 69 E 70 F 71 G 72 H 73 I 74 J 75 K 76 L 77 M 78 N 79 O 80 P 81 Q 82 R 83 S 84 T 85 U 86 V 87 W 88 X 89 Y 90 Z 91 [ 92 \ 93 ] 94 ^ 95 _ 96 ` 97 a 98 b 99 c 100 d 101 e 102 f 103 g 104 h 105 i 106 j 107 k 108 l 109 m 110 n 111 o 112 p 113 q 114 r 115 s 116 t 117 u 118 v 119 w 120 x 121 y 122 z
Merkin merkkikoodin saa selville näin:
char merkki = 'A'; System.out.println("Merkkikoodi: " + (int)merkki);
Vastaavasti merkkikoodin merkin saa selville näin:
int koodi = 65; System.out.println("Merkki: " + (char)koodi);
Seuraava koodi tulostaa kirjaimet väliltä A–Z:
for (char i = 'A'; i <= 'Z'; i++) { System.out.print(i); } System.out.println();
Ohjelman tulostus on seuraava:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Kuten tästä esimerkistä havaitaan, char
-arvoja voi käsitellä
hyvin samalla tavalla kuin lukuarvoja.