
Znaky v jazyku JavaProgramovací jazyk Java podporuje kódovanie Unicode. To znamená, že program napísaný v Jave dokáže pracovať s textami napísanými v rôznych jazykoch rôznymi písmami bez toho, že by na to programátor musel osobitne myslieť. Typ charPodľa pôvodného zámeru autorov jazyka Java mala každému znaku Unicode zodpovedať jedna hodnota primitívneho typu char. Neskôr sa však Unicode zmenil tak, že sa toto pravidlo nedalo dodržať a veci sa tým trochu skomplikovali. Slovenských znakov sa to našťastie netýka. Treba teda upresniť, že v jazyku Java sú textu uložené v kódovaní UTF-16 štandardu Unicode. Pôvodne sa všetky kódy znakov štandardu Unicode dali vyjadriť 16-bitovým číslom. Typ char je 16-bitové číslo bez znamienka. V dnešnej verzii štandardu Unicode potrebujeme na vyjadrenie niektorých znakov až 21 bitov. Kódovanie UTF-16 určuje, ako týchto 21 bitov zapísať pomocou jedného alebo dvoch 16-bitových čísel; a tie sú potom uložené ako jedna alebo dve hodnoty typu char. Vzťah medzi Unicode a UTF-16 je nasledujúci: Každému znaku v Unicode je pridelené číslo, nazývané "code point". Ak je toto číslo v 16-bitovom rozsahu, čiže od 0 do 65535, zapisuje sa v UTF-16 ako jeden char. V šestnástkovej sústave sú to čísla od 0 do FFFF. Oblasť čísel od 55296 do 57343 (šestnástkovo od D800 do DFFF) je však v štandarde Unicode nevyužitá. Znaky s číslami od 65536 do 1114111 (šestnástkovo od 10000 do 10FFFF) sa zakódujú ako dve hodnoty char z tohoto nevyužitého rozsahu. Trieda CharacterPrimitívnemu typu char zodpovedá objektový typ java.lang.Character. Funkcia Character.charCount vráti počet hodnôt typu char potrebných na uloženie znaku Unicode. Ďalšie statické funkcie na prácu so znakmi majú niekedy parameter char a niekedy int; v tom druhom prípade očakávajú ako vstup číslo znaku podľa štandardu Unicode. Funkcie Character.digit a Character.forDigit určujú číslice v rôznych číselných sústavách, napríklad že číslici 1 zodpovedá znak '1' a číslici 10 v šestnástkovej sústave zodpovedá znak 'a'. Funkcia Character.getNumericValue dokáže rozoznať číselné hodnoty rôznych znakov, napríklad rímskych číslic. Ak chceme zistiť, čo daný znak znamená (či je to číslica, písmeno, znamienko, atď), môžeme využiť funkciu Character.getType, ktorá vráti jednu z mnohých konštánt, alebo sa môžeme pýtať na príslušnosť ku konkrétnemu typu pomocou funkcií isDigit, isHighSurrogate, isISOControl, isLetter, isLetterOrDigit, isLowSurrogate, isSpaceChar, isSupplementaryCodePoint, isSurrogatePair a isWhitespace. Ak to chceme využiť na analýzu zdrojového kódu v jazyku Java, môžeme rovno použiť funkcie Character.isJavaIdentifierStart a Character.isJavaIdentifierPart, ktoré určujú, či daný znak možno v jazyku Java použiť ako súčasť identifikátora. Na prevod medzi veľkými a malými písmenami sú tu funkcie toLowerCase, toTitleCase a toUpperCase. Ale neodporúčam ich používať, pretože vzťah veľké/malé písmeno môže závisieť od konkrétneho jazyka. Rozhranie CharSequenceV jazyku Java je niekoľko tried, ktoré vyjadrujú postupnosť znakov, napríklad String, StringBuffer a StringBuilder. Všetky implementujú rozhranie java.lang.CharSequence. Objekt typu String sa nemôže zmeniť. To znamená, že ak chceme k danému reťazcu pridať na koniec písmeno, obsah reťazca sa skopíruje na nové miesto v pamäti, pridá sa k nemu písmeno, a výsledkom je nový objekt String. Keby sme takto chceli z písmen alebo mnohých krátkych reťazcov poskladať jeden veľký reťazec, časová náročnosť by bola kvadratická. Triedy StringBuffer a StringBuilder sú určené na takéto postupné skladanie reťazcov. Trieda StringBuffer je synchronizovaná, takže je bezpečnejšia pri práci s viacerými vláknami, ale pomalšia. Trieda StringBuilder nie je synchronizovaná, takže je rýchlejšia; odporúča sa, keď používame iba jedno vlákno, alebo si synchronizáciu riešime sami. Trieda StringBuilder sa automaticky používa, ak sčítame reťazce operátorom plus. Nasledujúce dva kusy programu robia to isté: String a = "hello"; String b = "world"; String c = a + ' ' + b + '!'; System.out.println(c); String a = "hello";
String b = "world";
StringBuilder temp = new StringBuilder();
temp.append(a);
temp.append(' ');
temp.append(b);
temp.append('!');
String c = temp.toString();
System.out.println(c);
Každý objekt má metódu toString, ktorá vracia textový popis daného objektu. Ak implementujete túto metódu aj vo vlastných triedach, uľahčíte si tým ladenie. |
Viliam Búr [sk] domáca stránka (feed) viliam@bur.sk ICQ: 133571943 Blog: JavaScript pre začiatočníkov (3) JavaScript pre začiatočníkov (2) Linky: Sponzorované odkazy: |