5. Ř etězce (třída String)



Podobné dokumenty
3 Vývojová prostředí, základní prvky jazyka Java, konvence jazyka Java

Algoritmizace a programování

-1- N á v r h ČÁST PRVNÍ OBECNÁ USTANOVENÍ. 1 Předmět úpravy

účetních informací státu při přenosu účetního záznamu,

Data v počítači EIS MIS TPS. Informační systémy 2. Spojení: jan.skrbek@tul.cz tel.: Konzultace: úterý

Příprava na 1. čtvrtletní písemku pro třídu 1EB

Uložené procedury Úvod ulehčit správu zabezpečení rychleji

awk programovatelný filtr

Aplikace počítačů v provozu vozidel 9

Algoritmizace a programování

Soubory a databáze. Soubor označuje množinu dat, která jsou kompletní k určitému zpracování a popisují vybrané vlastnosti reálných objektů

S_5_Spisový a skartační řád

Cílem kapitoly je seznámit studenta se strukturou programu a jeho překladem.

DATABÁZE DŮLEŽITÉ: Před načtením nové databáze do vaší databáze si prosím přečtěte následující informace, které vám umožní:

Regulární výrazy. Vzory

Maturitní témata z předmětu Programování a databázové systémy. pro šk. rok 2012/2013

Operace nad celými tabulkami

Základní stavební prvky algoritmu

KOMORA DAŇOVÝCH PORADCŮ ČR STANDARD PRO SDÍLENÍ ÚČETNÍCH / FAKTURAČNÍCH ÚDAJŮ. (Short Invoice Descriptor)

Co najdete v ASPI? (pro uživatele SVI FSE UJEP)

Integrovaný Ekonomický Systém Zakázkový list - IES WIN 2006

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

OBEC HORNÍ MĚSTO Spisový řád

Obsah. Úvodem 9 Komu je kniha určena 9 Forma výkladu 9 Konkrétní postup výuky 10 Příklady ke knize 11

VI. Finanční gramotnost šablony klíčových aktivit

4.5.1 Magnety, magnetické pole

Android Elizabeth. Verze: 1.3

SKLÁDANÉ OPĚRNÉ STĚNY

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

V této části manuálu bude popsán postup jak vytvářet a modifikovat stránky v publikačním systému Moris a jak plně využít všech možností systému.

FOND VYSOČINY NÁZEV GP

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT. Cyklus while, do-while, dělitelnost, Euklidův algoritmus

1.2.5 Reálná čísla I. Předpoklady:

Používání klávesnice. Zobrazit vše. V tomto článku

NÁVRHOVÝ PROGRAM VÝMĚNÍKŮ TEPLA FIRMY SECESPOL CAIRO PŘÍRUČKA UŽIVATELE

Programování 1. hodina. RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015

metodická příručka DiPo násobení a dělení (čísla 6, 7, 8, 9) násobilkové karty DiPo

METODIKA PRO NÁVRH TEPELNÉHO ČERPADLA SYSTÉMU VZDUCH-VODA

Pokyny k vyplnění Průběžné zprávy

1 - Prostředí programu WORD 2007

170/2010 Sb. VYHLÁŠKA. ze dne 21. května 2010

Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová

Úprava tabulek v MS Word. Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T. G. Masaryka, Kostelec nad Orlicí

M. Balíková, R. Záhořík, NK ČR 1

Převodník tlaku P 40 Návod k použití

ODBORNÝ VÝCVIK VE 3. TISÍCILETÍ MEII MĚŘENÍ ZÁKLADNÍCH EL. VELIČIN

Strojní součásti, konstrukční prvky a spoje

TECHNICKÉ KRESLENÍ A CAD

Na následující stránce je poskytnuta informace o tom, komu je tento produkt určen. Pro vyplnění nového hlášení se klikněte na tlačítko Zadat nové

Miroslav Kunt. Srovnávací přehled terminologie archivních standardů ISAD(G), ISAAR(CPF) a české archivní legislativy

Hra Života v jednom řádku APL

Objektově orientované databáze

MAGIS ve strojírenské firmě Strojírna Vehovský s.r.o.

10 je 0,1; nebo taky, že 256

Oborové číslo Hodnocení - část A Hodnocení - část B Hodnocení - část A+B

Sbírka úloh pro elektronickou stavebnici. Stručný popis programovacího jazyka Bascom AVR

Podrobný postup pro vygenerování a zaslání Žádosti o podporu a příloh OPR přes Portál farmáře

1. Účel použití. Univerzální hořáky (27kW až 90kW)

Uživatelská dokumentace

Č.j.: 3R18/04-Ku V Brně dne

VY_62_INOVACE_VK64. Datum (období), ve kterém byl VM vytvořen Červen 2012

Vývoj některých demografických ukazatelů v ČR a v Západočeském kraji v uplynulých 15 letech a pokus o odhad jejich vývoje do příštích 5 let

PRAVIDLA soutěže COOP DOBRÉ RECEPTY Jarní probuzení

KLADENÍ VEDENÍ. VŠB TU Ostrava Fakulta elektrotechniky a informatiky Katedra obecné elektrotechniky

Výzva k podání nabídek (zadávací dokumentace)

Software IS Řízení stavebních zakázek

Mikromarz. CharGraph. Programovatelný výpočtový měřič fyzikálních veličin. Panel Version. Stručná charakteristika:

Modul Řízení objednávek.

PODPORA ČINNOSTI NESTÁTNÍCH NEZISKOVÝCH ORGANIZACÍ PŮSOBÍCÍCH NA ÚZEMÍ MČ PRAHA 7 V OBLASTI SPORTU PRO ROK 2015

WEBDISPEČINK NA MOBILNÍCH ZAŘÍZENÍCH PŘÍRUČKA PRO WD MOBILE

Organismy. Látky. Bakterie drobné, okem neviditelné, některé jsou původci nemocí, většina z nich je však velmi užitečná a v přírodě potřebná

Poukázky v obálkách. MOJESODEXO.CZ - Poukázky v obálkách Uživatelská příručka MOJESODEXO.CZ. Uživatelská příručka. Strana 1 / 1. Verze aplikace: 1.4.

Zaměstnání a podnikání, hrubá a čistá mzda.

TECHNICKÁ DOKUMENTACE NA PC

Příloha č. 54. Specifikace hromadné aktualizace SMS-KLAS

Projekt: Inovace oboru Mechatronik pro Zlínský kraj Registrační číslo: CZ.1.07/1.1.08/

Elektrická měření 4: 4/ Osciloskop (blokové schéma, činnost bloků, zobrazení průběhu na stínítku )

2/3.3 Spis. Správní řád v praxi. 2/3.3 str. 1

Základy typografie (typografická pravidla)

ZNAK ČERVENÉHO KŘÍŽE, JEHO OCHRANA A UŽÍVÁNÍ

Textové editory a procesory

Škola VOŠ a SPŠE Plzeň, IČO , REDIZO

Sada 2 - MS Office, Excel

Seznámení žáků s pojmem makra, možnosti využití, praktické vytvoření makra.

ČESKÁ ZEMĚDĚLSKÁ UNIVERZITA V PRAZE

Java a Caché IV: Manipulace s objekty

Katedra obecné elektrotechniky Fakulta elektrotechniky a informatiky, VŠB - TU Ostrava 16. ZÁKLADY LOGICKÉHO ŘÍZENÍ

I. Všeobecná ustanovení

Přehled úprav aplikace e-spis verze 2.24

Zvyšování kvality výuky v přírodních a technických oblastech CZ.1.07/1.128/ Nástrahy virtuální reality (pracovní list)

Výzva pro předložení nabídek k veřejné zakázce malého rozsahu s názvem Výměna lina

Sportovní soukromá základní škola Litvínov s.r.o. Podkrušnohorská 1677, Litvínov,

ZÁKLADNÍ POVINNOSTI DOPRAVCE I PRÁCI S DATY Z DIGITÁLNÍHO TACHOGRAFU

POPIS VÝROBKU A ZAMÝŠLENÉ POUŽITÍ

499/2004 Sb. ZÁKON ČÁST PRVNÍ ARCHIVNICTVÍ A SPISOVÁ SLUŽBA

DIGITÁLNÍ HRACÍ HODINY DGT 2000 FIDE OFICIÁLNÍ ŠACHOVÉ HODINY

TÉMA BAKALÁŘSKÉ PRÁCE

Pokyny k vypracování absolventské práce ZŠ a MŠ Kladno, Vodárenská 2115

NÁVOD K OBSLUZE MODULU VIDEO 64 ===============================

Metody hodnocení rizik

Transkript:

Řetězce (třída String) strana 49 5. Ř etězce (třída String) Pro práci s řetězci (tj. s posloupností znaků) se v jazyce Java používá třída String. Třída String slouží k ukládání konstantních řetězců, jejichž hodnota se během činnosti programu nezmění (jedná se o příklad read-only třídy) toto však neznamená, že stejný identifikátor nemůže v průběhu programu ukazovat na různé hodnoty (různé instance). Instanci třídy String lze vytvořit třemi způsoby: explicitně následující definicí (není vhodné tento způsob vůbec používat, neboť druhá varianta je kratší, rychlejší a přehlednější): String text = new String("abcd"); implicitně, kdy překladač automaticky doplní potřebný kód pro vytvoření instance typu String: String text = "abcd"; implicitně, kdy se nedefinuje ani identifikátor (odpovídá konstantě primitivních datových typů): "abcd"; Pro práci s řetězci jsou definovány operátory + a += pro spojení dvou řetězců (instancí třídy String) do nové instance třídy String (do nového řetězce) 11. Při použití operátoru += (např. retezec1 += retezec2) se odkaz na novou instanci přiřadí k identifikátoru uvedenému na levé straně výrazu. Spojování řetězců si ukážeme v následujícím příkladu: int cislo = 10; String retezec1 = "Výsledek je"; System.out.println(retezec1 + " " + cislo + " korun"); Příklad vypíše následující řádek: Výsledek je 10 korun Pokud se k řetězci připojuje operátorem + proměnná primitivní typu (int, long a další), překladač automaticky zajistí její převod na typ String (viz předchozí příklad s metodou println()). Pokud se k řetězci připojuje instance objektu, překladač automaticky doplní volání metody tostring(), která převede objekt na řetězec. Pozor na posloupnost operací viz následující příklady: System.out.println ("Výsledek je " + 5 + 7); Tento řádek vypíše následující text: Výsledek je 57 Pokud chceme čísla sečíst, musíme sčítání uzavřít do kulatých závorek. System.out.println ("Výsledek je " + (5 + 7)); A tento řádek kódu vypíše toto: Výsledek je 12 5.1. Porovnávání řetězců Při práci s řetězci v programu je třeba si uvědomit, že řetězce nejsou primitivní datový typ, ale instance třídy String, tj. referenční datové typy. Pro porovnání obsahu dvou řetězců se používá metoda equals(). Syntaxe porovnání řetězců retezec1 a retezec2 je následující: retezec1.equals(retezec2) a výsledek je typu boolean. Od verze 1.4 Java optimalizuje ukládání řetězců v paměti cílem je ukládat stejné řetězce v paměti pouze jednou. Při následující deklaraci se v paměti vytvoří pouze jedna instance, na kterou budou odkazovat oba identifikátory. 11 Jedná se o jediné případy přetížení (overloading) operátorů v Javě.

Řetězce (třída String) strana 50 String retezec1 = "textik"; String retezec2 = "textik"; Proto i při porovnání pomocí operátoru == je výsledkem hodnota true, i když to na první pohled odporuje tomu, co jsme si říkali o relačních operátorech pro referenční typy (při porovnání dvou proměnných referenčního typu pomocí operátoru == je výsledkem hodnota true, pokud obě proměnné odkazují na stejnou instanci). Optimalizace ukládání ř etězců probíhá v době překladu a při zavádění tříd do paměti. Pokud se však řetězec vytvoří až za běhu, tak se neoptimalizuje uložení a porovnání pomocí operátoru == proto nefunguje. V následujícím kódu metoda println() vypíše hodnotu false: String retezec1 = "text"; System.out.println( (retezec1 + "ik") == "textik)); Doporučujeme vždy používat pro porovnání metodu equals() je pouze nepatrně pomalejší, ale garantuje porovnávání dle obsahu za všech situací. 5.2. Další operace s řetězci Pro převody primitivních datových typů na řetězce je ve třídě String definována metoda třídy valueof(). Například: String retezec1 = String.valueOf(3.7629); uloží do objektu retezec1 hodnotu 3.7629 jako řetězec. Stejného výsledku lze dosáhnout i následujícím výrazem String retezec1 = "" + 3.7629; kdy se využije vlastnosti automatické konverze proměnných na řetězec. Tato druhá varianta je však pom alejší, neboť zde se vedle konverze vytvoří objekt typu String s prázdným řetězcem a oba řetězce se spojí do další instance třídy String. Metoda String.valueOf s parametrem typu objekt vrací na výstupu výsledek metody tostring() příslušného objektu. Třída String poskytuje velké množství dalších metod pro práci s řetězci. Mezi základní patří následující: 12 metoda int length() boolean equals(string str) boolean equalsignorecase(string str) boolean endswith(string koncovka) boolean startswith(string str) String tolowercase() String touppercase() vrací délku uloženého řetězce porovnání obsahu dvou instancí třídy String porovnání obsahu dvou instancí třídy String s tím, že se nerozlišují malá/velká písmena zjišťuje, zda uložený řetězec končí zadanou koncovkou zjišťuje, zda uložený řetězec začíná uvedeným parametrem vrací instanci třídy String se všemi znaky převedenými na malá písmena vrací instancí třídy String se všemi znaky převedenými na velká písmena 12 Při prohlížení tohoto výrazu mohou u některých čtenářů vzniknout pochybnosti, proč zde není operátor new pro vytvoření nového objektu. Metoda valueof() sama uvnitř vytvoří novou instanci třídy String a na výstupu vrací pouze odkaz na tuto instanci, který se přiřadí k příslušnému identifikátoru.

Řetězce (třída String) strana 51 metoda String substring(int beginindex) String substring(int beginindex, int endindex) int indexof(string str) char[] tochararray() static String valueof(object o) vrací instanci třídy String obsahující část řetězce začínající na zadaném indexu vrací instanci třídy String obsahující část řetězce začínající na zadaném indexu a končící druhým indexem vrací pozici v rámci uloženého řetězce, na které začíná řetězec uvedený jako parametr; pokud neobsahuje zadaný řetězec, vrací hodnotu 1 převede uložený řetězec do pole znaků vrátí textovou reprezentaci objektu pokud je parametrem hodnota null, vrátí řetězec null, jinak vrátí výsledek metody o.tostring() Tabulka 5.1 Přehled nejpoužívanějších metod třídy String 5.3. Speciální (escape) znaky v řetězcích Při psaní textových řetězců i znakových konstant ve zdrojovém kódu programu lze používat speciální (escape) znaky uvozené zpětným lomítkem viz tabulka 5.2. escape znak \t tabulátor \n nový řádek, používá se při výstupu do konzole či do souboru \" uvozovky \ apostrof \\ zpětné lomítko Tabulka 5.2 Přehled escape znaků používaných třídou String Do řetězců lze vkládat znaky z tabulky Unicode 13 pomocí zápisu \uxxxx, kde na místě xxxx jsou uvedeny hexadecimální znaky. Např. zápis \u20ac odpovídá znaku (euro). Dále lze vkládat znaky pomocí ok tálových čísel (prvních 256 znaků z tabulky Unicode \u0000 až \u00ff) za z pětným lomítkem se uvedou oktalová čísla 0 377. 5.4. Formátování řetězců Od verze 5 Java podporuje formátování řetězců podobné funkcím sprintf() a printf() v jazyce C. Ve třídě S tring je k dispozici statická metoda format(), která se obvykle používá pro formátování řetězců. Toto formátování se dále používá v metodě printf() ve třídách PrintWriter a PrintStream. V těchto metodách se jako první parametr zadává předpis pro formátování výstupu. Poté následují parametry, které se doplní do příslušné části předpisu. Vlastní formátování zajišťuje třída Formatter, u které jsou podrobně popsána pravidla pro formátování. Při volání metod používajících formátování lze jako první parametr uvést odkaz na příslušné národní prostředí ( Locale), které ovlivňuje např. formátování data a času či znaky použité na místě desetinné čárky. Předpis pro formátování obsahuje text y/znaky, které mají být součástí každého výstupu a formáty pro jednotlivé parametry uvozené znakem procento (%). Následují příklady použití: 13 Od verze 5.0 Java podporuje rozšířené znaky Unicode znaky, které jsou mimo základní rozsah 2 bytů. Podrobnosti o jejich používání najdete v dokumentaci Javy u firmy Sun.

Řetězce (třída String) strana 52 String vystup = String.format("strana: %d/%d", strana, pocetstran); System.out.printf("úhly alfa: %f6.4, beta: %f6.4, gama: %f6.4%n", alfa, beta, gama); System.out.printf("%-30s %2d %f4.2%n", prijmeni, semestr, prumer); V prvním pří kladu se na místo prvního řetězce %d doplní obsah proměnné strana, místo druhého řetě zce %d se doplní obsah proměnné pocetstran. Obecná specifikace formátu vypadá následovně: %[argument_index$][příznaky][šířka][.přesnost]konverze Z jednotlivých částí je nutný pouze úvodní znak procenta a určení konverze parametru. Číslo argument_index odkazuje na pořadí parametrů (počítají se od 1) a používá se při formátování data. Šířka udává minimální počet výstupních znaků pro formátování výstupu. Pokud se parametr do uvedeného počtu znaků nevejde, tak se vypisuje ve skutečné velikosti. Pokud je počet znaků delší než vlastní výstup, tak se výstup zarovná vpravo (pokud není uveden příznak pro zarovnání vlevo). Přesnost omezuje počet výstupních znaků, přesný význam závisí na konkrétní konverzi. U desetinných čísel znamená počet číslic za desetinnou tečkou (zaokrouhluje se), u formátu %s určuje maximální počet znaků. Pro ostatní konverze nemá přesnost smysl. V následující tabulce jsou uvedeny možné konverze. Pokud se místo malého písmene označujícího formát použije velké písmeno, tak se výstup na konci převede na velká písmena. konverze typ parametru 'b', 'B' libovolný Pokud je parametr typu boolean či Boolean, tak vloží true či false. Pokud je parametr jiného typu, výsledkem je true. Pokud je parametrem hodnota null, vloží se false. 'h', 'H' libovolný Pokud je parametrem hodnota null, vloží se null. Jinak se vloží výsledek metody Integer.toHexString(arg.hashCode()). 's', 'S' libovolný Pokud je parametrem hodnota null, vloží se null. Pokud parametr implem entuje rozhraní Formattable, vloží se výsledek metody arg.formatto(). Jinak se vloží výsledek metody arg.tostring(). 'c', 'C' znak Vloží se znak v Unicode. 'd' celé číslo Vloží se celé číslo v dekadickém tvaru. 'o' celé číslo Celé číslo se vloží v oktalové notaci. 'x', 'X' celé číslo Vloží se celé číslo v hexadecimální notaci. 'e', 'E' desetinné číslo Vloží se desetinné místo ve vědecké notaci. 'f' desetinné číslo Vloží se desetinné číslo. 'g', 'G' desetinné číslo V závislosti na velikosti čísla a požadované přesnosti se vloží desetinné číslo v normální či ve vědecké notaci. 'a', 'A' desetinné číslo Vloží se číslo v hexadecimálním tvaru. 't', 'T' datum/čas Prefix pro konverzi data a času následuje upřesňující znak, bližší viz dokumentace třídy Formatter. '%' Vloží se znak '%'. 'n' Vloží se správný oddělovač řádků pro konkrétní platformu. Tabulka 5.3 Přehled možných konverzí používaných v metodách format() a printf()

Řetězce (třída String) strana 53 Při specifikaci formátu lze použít příznaky uvedené v následující tabulce. příznak '-' význam pokud bude výstup kratší, než uvedená délka, zarovná se doleva '0' u čísel budou uvedeny úvodní nuly '+' u čísel bude vždy uvedeno znaménko ',' u čísel budou použity oddělovače řádů dle národního prostředí (Locale) Tabulka 5.4 Přehled specifikací formátu Při nesprávně zapsaném formátu či při neodpovídajícím datovém typu vznikají výjimky, které by měl programátor odchytávat. 5.5. Regulární výrazy Regulární výrazy umožňují zjistit, zda zadaný řetězec či jeho část odpovídá zadanému vzoru. Dále je možné nahradit část řetězce jiným a dle vzoru rozdělit řetězec na jednotlivé části. Regulární výrazy jsou součástí Javy od verze 1.4, kdy byl doplněn balíček java.util.regex a třída String byla rozšířena o několik metod pracujících s regulárními výrazy viz následující tabulka. hlavička metody třídy String public boolean matches(string regex) public String replacefirst(string regex, String replacement) public String replaceall(string regex, String replacement) public String[] split(string regex) public String[] split(string regex, int limit) metody zjišťuje, zda celý uložený řetězec v instanci odpovídá celému vzoru metoda nahradí první výskyt odpovídající zadanému vzoru druhým řetězcem metoda nahradí všechny výskyty odpovídající zadanému vzoru druhým řetězcem metoda rozdělí řetězec na základě zadaného vzoru na jednotlivé části a vrátí jako pole řetězců metoda rozdělí řetězec na základě zadaného vzoru na jednotlivé části a vrátí jako pole řetězců; proti předchozí variantě je omezen maximální počet částí, na které se řetězec rozdělí Tabulka 5.5 Metody třídy String, které pracují s regulárními výrazy V případě vícenásobného použití stejného regulárního výrazu (např. v cyklu) je efektivnější použít třídy Pattern a Matcher, které obsahují i další metody rozšiřující možnosti regulárních výrazů. Vzory jsou základní prvky pro vytváření regulárních výrazů vzorem se uje, jak má přípustný řetězec vypadat. Nejjednodušším vzorem je řetězec, který chceme vyhledat. Následuje přehled základních pravidel pro vytváření vzorů, další možnosti jsou uvedeny v dokumentaci. speciální symbol v regulárním výrazu. (tečka) libovolný znak + (plus) minimálně jedno opakování předchozího znaku/výrazu * (hvězdička) 0 až nekonečno opakování předchozího znaku/výrazu [ ] (hranaté závorky) množina, tj. libovolný znak z množiny znaků uvnitř závorek

Řetězce (třída String) strana 54 speciální symbol v regulárním výrazu \ (zpětné lomítko) potlačuje speciální význam následujícího znaku či uvozuje speciální skupinu znaků (pokud je za lomítkem písmeno či číslice) \\ zpětné lomítko \b hranice slova \d číslice \s netisknutelné znaky mezera, tabulátor, konec řádku X Y (X) buď znak X nebo znak Y označení skupiny Tabulka 5.6 Přehled nejčastěji používaných speciálních symbolů pro regulární výrazy Příklady V příkladech jsou vzory zadány jako řetězce ve zdrojovém kódu programu v této poměrně obvyklé situaci se uplatňuje zpětné lomítko též jako speciální znak pro řetězcovou konstantu (viz tabulka 5.7) a proto je potřeba pro vložení zpětného lomítka vzoru uvést dvě zpětná lomítka. příklad regulárního výrazu a retezec.matches("ahoj"); True, pokud řetězec obsahuje pouze "ahoj" vhodnější je použít metodu equals(), neboť je rychlejší. retezec.matches(".*\\bahoj\\b.*"); True, pokud řetězec slovo ahoj (jsou zde uvedeny hranice slova). retezec.matches("\\s*"); Tr ue, poku d řetězec je prázdný, tj. má nulovou délku, či obsahuje pouze mezery nebo tabulátory. retezec.matches(".*\\s+"); True, pokud na konci řetězce je minimálně jedna mezera a tabulátor. retezec.matches("[a-wyz].*"); True, pokud řetězec začíná písmenem a až z s výjimkou písmene x. retezec.matches(".*\\\\.*"); Zjišťuje se, zda řetězec obsahuje aspoň jedno zpětné lomítko. retezec.matches(".*\\s(try) (catch)\\s.*"); True, pokud řetězec obsahuje slovo try či catch (nebo oboje) oddělené od okolí mezerou či tabulátorem. radek = radek.replacefirst("^\\s+",""); Zrušení mezer na začátku řádku. radek = radek.replacefirst("\\s+$",""); Zrušení mezer na konci řádku. radek = radek.replaceall("\\s+",""); Zrušení všech mezer v řádku.

Řetězce (třída String) strana 55 příklad regulárního výrazu a String radek = "xabcd01:1:in:student Testovací"; String [] polozky = ra dek.split(":"); Řádek se rozdělí na jednotlivé části, oddělovačem je znak dvojtečky. Vznikne pole se čtyřmi prvky. String radek = "xabcd01 1 String [] polozky = radek.split("\\s+",4); Řádek se rozdělí na jednotlivé části s tím, že oddělovačem je posloupnost mezer a tabulátorů. Výstup je omezen na maximálně čtyři položky, které i v našem případě vzniknou. IN Student Testovací"; Tabulka 5.7 Příklady použití regulárních výrazů V následující ukázce se zpracovávají řádky z textového souboru o evidovaných počítačích. Řáde k vstupního souboru vypadá následovně (IP adresa, jméno, umístění): 146.102.33.1:s019h01:019sb Program ze vstupního souboru vybere řádky z místnosti 019sb (na začátku se provádějí kontroly vstupního řádku), jeho rozdělení na části pomocí metody split() a nahrazení části textu jiným (v našem případě se nahradí prázdným řetězcem, tj. v podstatě se začátek řetězce zruší). Pro výše uvedený ukázkový řádek bude výsledkem hodnota "33.1". String radek = vstup.readline(); while (radek!= null) { if (radek.matches("#.*")) { // komentar next; if (radek.matches("[ \t]*")) { // prázdný řádek ci //pouze mezery a tabulátory next; if (r adek.matches("[0-9\\.]+:.+:.+" )) { // řádek je O.K. if (radek.matches(".*:019sb")) { //z místnosti 019sb? String [] prvky = radek.split(":"); // rozdělení řádku // na části dle : String ipadresa=prvky[0].replacefirst("146.102.",""); // cast IP adresy... radek = vstup.readline(); Čtení ze souboru je podrobně popsáno v kapitole věnované vstupně/výstupním operacím. 5.6. Třídy StringBuffer a StringBuilder Ke třídě String existuje alternativní třída StringBuffer, která na rozdíl od třídy String není read-only při přidávání/rušení řetězců se nevytváří nové instance, čímž lze dosáhnout větší efektivity programu. Od Javy 5.0 existuje ještě třída StringBuilder, která má stejné metody jako StringBuffer. Hlavní rozdíl je v tom, že třídy StringBuilder není synchronizovaná tj. nelze ji používat ve vláknech. Pokud je použita v jednom vlákně, tak je rychlejší než StringBuffer. Použití třídy StringBuffer má význam v situaci, kdy potřebujeme spojit více řetězců, vkládat řetězce dovnitř existujícího řetězce či střídavě vkládat/rušit části řetězce. V následující tabulce je přehled vybraných metod tříd StringBuffer a StringBuilder.

Řetězce (třída String) strana 56 metoda int length() StringBuffer append(string str) StringBuffer append(object o) StringBuffer insert(int pozice, String str) StringBuffer insert(int pozice, Object o) StringBuffer delete(int zacatek, int konec) String tostring() String substring(int beginindex) String substring(int beginindex, int endindex) vrací délku uloženého řetězce na konec uloženého řetězce vloží obsah instance třídy String k uloženému řetězci přidá textovou reprezentaci objektu (výsledek operace String.valueOf(o)) na zadanou pozici vloží řetězec na zadanou pozici vloží textovou reprezentaci objektu (výsledek operace String.valueOf(o)) smaže znaky z pozice zacatek po pozici konec vrátí obsah jako instanci třídy String vrací instanci třídy String obsahující část řetězce začínající na zadaném indexu vrací instanci třídy String obsahující část řetězce začínající na zadaném indexu a končící druhým indexem Tabulka 5.8 Přehled vybraných metod třídy StringBuffer, třída StringBuilder má stejné metody V následujícím příkladu se prochází v cyklu mapa s druhy zvířat a jejich počty. Pro každý druh se vytvoří řetězec s em. for (String klic: mapa.keyset()) { StringBuffer sb = new StringBuffer(); sb.append("zvire "); sb.append(klic); sb.append(", pocet kusu "); sb.append(mapa.get(klic)).tostring(); String radek = sb.tostring(); Tento kód je asi o třetinu rychlejší (ale méně přehledný), než následující kód pracující s instancemi třídy String. for (String klic: mapa.keyset()) { String radek = "zvire "+klic+", pocet kusu "+mapa.get(klic); Třídy StringBuffer a StringBuilder jsou navrženy tak, že po zavolání metod append(), insert() a delete() vrací odkaz na sebe sama. To umožňuje přehlednější zápis řetězením těchto příkazů, viz následující kód. Tento kód je nejrychlejší používá se instance třídy StringBuilder, využívá se pouze jedna instance této třídy a na začátku je nastavena předpokládaná velikost řetězce. StringBuilder sb = new StringBuilder(60); for (String klic: mapa.keyset()) { sb.delete(0, sb.length()); sb.append("zvire ").append(klic); sb.append(", pocet kusu ").append(mapa.get(klic)); String radek = sb.tostring();