• Nem Talált Eredményt

Karakter és String

In document Programozás Javában (Pldal 81-86)

5. Lecke: Tömb, karakterlánc és adatbevitel

5.2.6 Karakter és String

Az elemi adattípusok között már bemutattuk a char típust. Egy ilyen típu-sú változó értéke egyetlen karakter lehet. A szöveges adatok kódolásához a számítógépek a kezdetektől fogva kódtáblázatokat használnak. Ez azt jelenti, hogy a szöveges adatokat alkotó karakterekhez egy-egy számot rendelünk, amelyet egy kódtáblázat tartalmaz. Tulajdonképpen tehát az egyetlen karakter tárolására szolgáló adattípus a tárolt karakter kódját tárolja.

Az egyik legelterjedtebb ilyen kódtábla az ASCII (American Standard Code for Information Interchange) volt, amely nevével ellentétben sajnos nem volt mindenki által elfogadott szabvány. Ugyan minden számítógép használt valami-lyen ASCII-implementációt, de ezek nem voltak egymással kompatibilisek, ami lehetetlenné tette a tényleges információcserét különböző típusú számítógépek között. Az ASCII másik hibája, hogy elsősorban angol nyelvű szövegek kódolásá-ra volt alkalmas. Az ASCII eredetileg 7 bites kódolás volt, ez 128 különböző ka-rakter kódolását tette lehetővé. Később 8 bitesre egészítették ki a szabványt, ezzel a kódolható karakterek szám a duplájára, 256-ra nőtt. Ez a 256-os korlát elegendő volt az angol ábécé 26 kis- és nagybetűjének, az írásjeleknek, a szám-jegyeknek a kódolásához, tehát azoknak a jeleknek a tárolásához, amelyek an-gol nyelvű szövegekben fordulnak elő. Az ASCII ezen kívül tartalmazott még számos grafikai jelet, amelynek segítségével pl. táblázatok szegélyét lehetett megrajzolni.

Más, latin betűs írást használó nyelveken írott szövegek általában nem vol-tak 100%-ig kódolhatók ASCII-vel, mert ez a kódrendszer nem tartalmazott minden ékezetes vagy egyéb, segédjellel ellátott latin betűt. Magyar nyelvű szövegek kódolásához vagy ékezetek nélkül, vagy a magyar ékezetes betűkre legjobban emlékeztető („kalapos”, „hullámos”) ékezetes jelek bevonásával nyílt mód.

Az ASCII-nek később számos kiterjesztése jelent meg, ezeket az ISO (Inter-national Standard Organization) szabványosította. Az ISO 8859-es szabványcsa-ládban olyan karakterkódolási szabványok kaptak helyet, amelyek alapvetően az ASCII-re épültek, de az egyik kódtáblákba beépítették más, latin betűs ábé-cék jeleit. Az ISO-8859-1-es szabvány a nyugat-európai nyelvek speciális jeleit tartalmazza, az ISO-8859-2 a kelet- és közép-európai nyelvek ábécéinek speciá-lis jeleit.

Az ISO-8859-ről bővebben olvashatunk pl. az alábbi címen:

http://hu.wikipedia.org/wiki/ISO_8859-n

A leírt problémák megoldására született meg az Unicode szabvány, illetve a szabványhoz tartozó karakterkódolások. Az Unicode szabvány 16 bites karak-terkódolást definiál, ez azt jelenti, hogy összesen 65536 elemű kódtáblát hasz-nálhatunk a segítségével. Ekkora méretű kódtábla lehetővé teszi gyakorlatilag az összes ma létező és használt írás jeleit.

A Java nyelv az Unicode-kódolást használ, vagyis egy char típusú adat egy tetszőleges Unicode jel lehet.

Egy char típusú változó egyetlen karaktert kaphat értékül, a karak-terliterálokat aposztrófok között kell megadni. A 3.2.4. fejezetben szó esett az Escape-szekvenciákról. Ezek segítségével egyetlen karaktert definiálunk, így ha egy char típusú változónak ilyen értéket adunk, az aposztrófok között két jelet adunk meg. Pl.:

277 char újsor = ’\n’;

A char típus egy egészjellegű típus. Ez azt jelenti, hogy egy char típusú érték egésszé konvertálható. Ilyenkor az egésszé konvertált érték az eredeti karakter kódja lesz.

Tömb, karakterlánc és adatbevitel 83

28. ábra: A char típusú adat int típusúvá konvertálható

A Javában a karakterláncok (sztringek) ábrázolásához a String osztály használható. A sztringek tehát a String osztályból példányosított objektu-mok.

278 String név1 = new String(„László”);

Ugyanakkor a nyelv több eszközzel is támogatja a sztringek egyszerűbb ke-zelését. Idézőjelek közé írt sztringliterálok úgy is értékül adhatók egy String típusú változónak, ha a példányosítást nem írjuk ki explicit módon a new operá-tor használatával.

279 String név2 = „Tamás”;

A sztringek tárolását a Java karaktertömbökkel valósítja meg. Így egy sztring létrehozható egy karaktertömbből is.

280 char[] betuk = {’H’, ’é’, ’t’, ’f’, ’ő’};

281 String nap = new String(betuk); // „Hétfő”

A nyelv a könnyebb kezelés érdekében lehetővé teszi, hogy két sztring egyenlőségét megvizsgáljuk az == operátorral.

29. ábra: Sztringek egyenlősége

Két sztringliterál csak akkor egyenlő, ha kis- és nagybetűk szerint tartal-mazzák ugyanazokat a karaktereket, ugyanabban a sorrendben. A sztringek összehasonlításakor a Java a sztringeket tároló karaktertömbök azonos indexű pozícióin álló karaktereit hasonlítja össze. Mivel az azonos betűk kis- és nagybe-tűs változatának kódja különbözik (pl. A – 65, a – 97), a csak kis- és nagybetűk-ben eltérő sztringek sem lesznek egyenlők. Hozzá kell tennünk, hogy ez az állí-tás csak akkor igaz, ha az összehasonlíállí-tást az == operátorral végezzük. A String osztály használatával van módunk arra, hogy két sztring egyezőségét megvizs-gáljuk a kis- és nagybetűk figyelmen kívül hagyása mellett. (Erről később, a String osztály metódusai között írunk részletesen.)

Tömb, karakterlánc és adatbevitel 85

30. ábra: A kis- és nagybetűk különböznek sztringek összehasonlításakor Sztringliterálok között értelmezett a + operátor, de természetesen nem összegképzésre. A + operátor sztringek között a konkatenálást, azaz az összefű-zést jelenti.

31. ábra: Sztringek összefűzése a + operátorral

A String osztályból létrehozott objektumok konstansok, azaz amikor egy sztringen módosítás jellegű műveletet hajtunk végre, nem az eredeti sztring változik, hanem mindig új sztring jön létre.

Habár a sztring karaktereit tömb segítségével tárolja a Java,a karakterek mégsem érhetők el úgy, ahogyan a tömböknél leírtuk azt.

32. ábra: A sztring közvetlenül nem kezelhető tömbként

A megoldáshoz tekintsük át a String osztály néhány hasznos metódusát!

In document Programozás Javában (Pldal 81-86)