4IT101 7.přednáška Třída String a regulární výrazy Algoritmy v kolekcích Vnitřní a vnořené třídy.

Slides:



Advertisements
Podobné prezentace
A1PRG - Programování – Seminář Ing. Michal Typová konverze, oblast platnosti, paměťové třídy 9 Verze
Advertisements

Interní datové typy a výjimky
Standardní knihovní funkce pro práci s textovými řetězci
(instance konkrétní třídy)
VISUAL BASIC Práce s řetězci Použitá literatura: Kvoch: Visual Basic 4.
Vaše jistota na trhu IT Další informace o třídách Rudolf Pecinovský
VISUAL BASIC Práce se soubory.
Třída Array Je součásti balíčku java.util Účelem je usnadnit práci s poli Metody – nejpoužívanější equel(),fill(),sort() a binarySearch() equels() Slouží.
ÚVOD DO CPP 7 Dědičnost - pokračování
PJV151 Vnořené a vnitřní členy mohou být členy tříd a interfejsů. Je-li X obalem Y a Y je obalem Z, pak Z získá jméno X$Y$Z - kompilací vzniknou classy.
4IT1014IT101 Pátá přednáška Datové struktury - pokračování Statické prvky třídy.
Vytvoření prvního programu
4IT101 šestá přednáška.
Polymorfismus Dědičnost
Čtvrté cvičení Objektové programování Objektový model v Javě
Desáté cvičení Java Core API Java Collection Framework JavaDoc.
Programování v Pascalu Přednáška 7
Materiály k přednášce Úvod do programování Ondřej Čepek.
Medians and Order Statistics Nechť A je množina obsahující n různých prvků: Definice: Statistika i-tého řádu je i-tý nejmenší prvek, tj., minimum = statistika.
4IT101 Testování a ladění, dokumentace API třídy,
Rudolf Pecinovský Kontejnery Rudolf Pecinovský
Druhá přednáška Datové typy a operátory Zapouzdření Pojem rozhraní
Páté cvičení Dědičnost Interface Abstarktní třídy a metody
Třída jako zdroj funkcionality
Seminář C cvičení STL, Trolltech Ing. Jan Mikulka.
Algoritmy a programovací techniky
Objektové programování
Datové typy a práce s nimi
Návrh a tvorba WWW Přednáška 11
Počítače a programování 1 8.přednáška. Obsah přednášky Řetězce - deklarace a vytvoření Základní metody pro práci s řetezci Znaky - třída Character Základní.
Alg91 Textové soubory Na rozdíl od jiných typů souborů jsou textové soubory určené pro gramotné lidské oko. Textový soubor je posloupnost znaků členěná.
Počítače a programování 1
Cvičení.
3. Příkazy  Příkazy dělíme na jednoduché a strukturované.  Jednoduché příkazy - žádnou jejich dílčí částí neni příkaz - přiřazovací, vstupu a výstupu,
Vaše jistota na trhu IT Interní datové typy Rudolf Pecinovský
VISUAL BASIC PRALG.
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
Datové typy a struktury
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
Dědičnost - inheritance dědičnost je jednou z forem znovupoužitelnosti dědičnost je jednou z forem znovupoužitelnosti B A Třída A je předkem třídy B Třída.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
13/04/20151 Indexery (1) Členy třídy (struktury) umožňující třídě (struk- tuře) používat hranaté závorky a pracovat s ní podobně jako s polem (používat.
Šesté cvičení Výjimky Balíky.
KIV/PPA1 cvičení 9 Cvičící: Pavel Bžoch. Osnova cvičení Třída String a její metody –Řetězce a operace s nimi.
1 Počítače a programování 1 13.přednáška. 2 Obsah přednášky Vstupy a výstupy – 1.část.
STRING A UKAZATELE. Co to je řetězec? Řetězec v Javě je samostatný objekt. Je konstantní, co znamená, že jednou vytvořený řetězec nelze změnit. Chceme-li.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
Datové typy a operátory. Co jsou datové typy  Charakterizují proměnnou nebo konstantu – jaká data obsahuje  Data jsou v počítači ukládána jako skupiny.
Soubory BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
4. Typ pole 4.1 Jednorozměrná pole
Počítače a programování 1 2.přednáška. Základní lexikální struktura programu Program v jazyce Java je tvořen symboly a oddělovači Program Java je psán.
Programování KONSTANTY, ČTENÍ PO JEDNOM ZNAKU GETCHAR() FORMÁTOVANÝ VÝSTUP POMOCÍ PRINTF, VÝVOJOVÉ DIAGRAMY, CYKLY.
Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY Datové typy a operátory Základní programové.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
Makra v Excelu syntaxe. Zápis nahraného makra SubEnd Sub O klíčová slova Sub a End Sub – začátek a konec makra O komentáře O text za znakem ', až do konce.
Y36PJC Programování v jazyce C/C++
Moduly.
Výukový materiál zpracován v rámci projektu
Generické typy jsou třídy či interfejsy deklarující tzv. typové parametry jimiž: systematizují typovou kontrolu kompilátorem, vyjadřují jasněji smysl,
Programovací jazyk C Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Jitka Vlčková. Dostupné z Metodického portálu ISSN.
Algoritmizace a programování
Typový příklad 3 – zadání 1
Funkce výstupu (2) Funkce printf: deklarována v: stdio.h
Databázové systémy a SQL
Oblast platnosti identifikátoru (1)
C# přehled vlastností.
Databázové systémy a SQL
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Transkript prezentace:

4IT101 7.přednáška Třída String a regulární výrazy Algoritmy v kolekcích Vnitřní a vnořené třídy

Třída String Specielní konstanty Přetížený operátor + Read only třída – žádná metoda nemění obsah řetězce, vždy vrací novou instanci Porovnávání obsahů řetězců podle equals() ne ==

Formátování řetězců metoda format() ve třídě String, metody printf() u výstupních operací (PrintStream či PrintWriter), interně se používá třída java.util.Formatter příklady: 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);

Formátování řetězců specifikace formátu %[argument_index$][příznaky][šířka][.přesnost]konverze konverze: dcelé číslo v dekadickém tvaru x, hcelé číslo hex, fdesetinné číslo gdesetinné číslo, u velkých čísel vědecký formát tformátování datumu a času bboolean stext, výsledek toString(), popř. null příznaky -zarovnání vlevo 0vypíše se úvodní nula +u čísel i znaménko +,vloží se oddělovač řádů dle národního prostředí

Lokalizace některé operace s textem závisí na nastavení jazyka a země, tzv. Locale, třída java.util.Locale, Metody závislé na Locale: –format(), –toLowerCase, –toUpperCase() při spuštění JVM se nastaví defaultní Locale,

StringBuffer StringBuilder pomocné třídy pro práci s řetězci „rychlejší“ operace s řetězci, 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)

Použití třídy StringBuffer 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(); } for (String klic: mapa.keySet()) { String radek = "zvire "+klic+", pocet kusu "+mapa.get(klic); }

Použití třídy StringBuilder 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(); }

Regulární výrazy od verze 1.4 regulární výraz je posloupnost znaků a symbolů, která definuje skupinu textových řetězců. balíček java.util.regex: –třídy Pattern a Matcher –výjimka PatternSyntaxException rozšíření třídy String

Třídy Pattern a Matcher Pattern p = Pattern.compile("a*b"); Matcher m = p.matcher("aaaaab"); boolean b = m.matches();

Metody třídy String využívající regulární výrazy matches(String vzor) replaceAll(String vzor, String repl) replaceFirst(String vzor, String repl) split(String vzor) split(String vzor, int n)

Syntaxe regulárních výrazů jednotlivé znaky: xkonkrétní znak \\zpětné lomítko (jeden znak) \0nznak zadaný pomocí oktalové soustavy (0- 377) \xhhznak zadaný pomocí hexadecimální soustavy \uhhhhznak z Unicode zadaný pomocí hexadecimální soustavy \ttabelátor \nznak LF (linefeed, newline) \rznak CR (carriage-return) \eznak escape

Syntaxe regulárních výrazů množiny znaků, tj jeden ze znaků v zadané množině [abc]jednoduchá množina (tj. jeden ze znaků a b c) [^abc]negace, tj. žádný ze znaků a b c, [a-zA-Z]rozsah znaků (znaky a až z a znaky A-Z).(tečka) libovolný znak \dčíslice, tj. [0-9] \Dnečíslice, tj. [^0-9] \s“netisknutelné” znaky, tj mezera, tabelátor, znaky konce řádku a konce stránky, \Sopak \s

Syntaxe regulárních výrazů označení hranic ^začátek řetězce $konec řetězce \bhranice slova znaky opakování ?předchozí znak bude 1x nebo 0x, *0 a více opakování předchozího znaku, +předchozí znak je minimálně jedenkrát, {n}přesně n opakování předchozího znaku, {n,}minimálně n opakování předchozího znaku, {m,n}minimálně m a maximálně n opakování předchozího znaku,

Syntaxe regulárních výrazů další operátory XYznaky X a Y musí být vedle sebe, X|Ybuď znak X nebo znak Y, (X)označení skupiny, \nobsah n-té skupiny,

Zápis regulárního výrazu v Javě V regulárním výrazu zapsaném ve zdrojovém textu musí být všechny \ zdvojené: "\\s+" " [0-9]+"

Příklady regulárních výrazů Zadání: Napište regulární výraz, který odpovídá řetězci "ahoj" ahoj if (retezec.matches("ahoj")) { vhodnější je if (retezec.equals("ahoj"))

Příklady regulárních výrazů Zadání: Napište regulární výraz, pomocí kterého je možno najít přebytečné mezery v textu \s+ if (retezec.matches("\\s+")) {

Příklady regulárních výrazů napište regulární výraz, pomocí kterého lze zjistit, zda řetězec obsahuje pouze číslice [0-9]+ if (retezec.matches("[0-9]+")) {

Příklady regulárních výrazů Zadání: napište regulární výraz pro kontrolu, zda řetězec je desetinné číslo ve formátu z desetinnou tečkou. -?\d+\.\d+ -?[0-9]+\.[0-9]+

Příklady regulárních výrazů napište regulární výraz, který bude sloužit ke kontrole formátu rodného čísla s lomítkem. [0-9]{6}/[0-9]{3,4} if (retezec.matches("[0-9]{6}/[0-9]{3,4}")) {

Náhrada řetězců String retezec = "vstupní řádek"; String normalizovany = retezec.replaceAll(" +"," "); radek = radek.replaceAll(" (knihu)|(knize) "," kniha "); mezera

Dělení řetězce na části – metoda split() String retezec = "seber knihu"; String [] poleSlovPrikazu = retezec.split(" "); if (poleSlovPrikazu.length >0 ) { slovo1 = poleSlovPrikazu[0]; // první slovo } if (poleSlovPrikazu.length >1 ) { slovo2 = poleSlovPrikazu[1]; // druhé slovo }

Třídění v kolekcích

Kolekce - třídění řazení (porovnávání): –rozhraní Comparable –rozhraní Comparator algoritmus pro třídění –Collections.sort(List seznam) –Arrays.sort()... –TreeSet CollectionsArrays

Rozhraní Comparable přirozené řazení předepisuje jedinou metodu int compareTo ( T o ) výsledek porovnání: 0rovná se <0menší než parametr >0větší než parametr mnoho tříd implementuje rozhraní Comparable

Implementace rozhraní Comparable ve třídě Ucet public class Ucet implements Comparable { private int cisloUctu; private String vlastnik; private double stav = 0; public int compareTo(Ucet druhyUcet){ if (this.cisloUctu == druhyUcet.cisloUctu){ return 0; } else { if (this.cisloUctu < druhyUcet.cisloUctu){ return -1; } else { return 1; }

Rozhraní Comparable Používá se při vytváření TreeMap nebo TreeSet, při třídění v polích a listech pomocí: Arrays.sort( pole ) Collections.sort( seznam ) Též pro hledání maxima/minima: Collections.max( kolekce ); Arrays.min( pole ); Je vhodné, aby pro dvě instance, pro které equals() vrací true, vracela metoda compareTo() nulu.

Collections.max public static T max(Collection coll) { Iterator i = coll.iterator(); T candidate = i.next(); while(i.hasNext()) { T next = i.next(); if (next.compareTo(candidate) > 0) candidate = next; } return candidate; } zjednodušena deklarace generických typů

Rozhraní Comparator deklaruje metodu int compare ( T prvni, T druhy ); obvykle se implementuje v pomocné třídě deklarace rozhraní: package java.util; public interface Comparator { int compare(T o1, T o2); boolean equals(Object obj); }

import java.util.Comparator; class PorovnavaniUctuDleAbecedy implements Comparator { public int compare (Ucet prvni, Ucet druhy){ String vlastnikPrvni = prvni.getVlastnik(); String vlastnikDruhy = druhy.getVlastnik(); return vlastnikPrvni.compareTo(vlastnikDruhy); } Collections.sort(seznamUctu, new PorovnavaniUctuDleAbecedy()); Set mnozinaUctu = new TreeSet( new PorovnavaniUctuDleAbecedy());

import java.util.Comparator; class PorovnavaniUctuDleStavu implements Comparator { public int compare (Ucet prvni, Ucet druhy){ if (prvni.getStav() == druhy.getStav()) { return 0; } else { if (prvni.getStav() > druhy.getStav()) { return 1; } else { return -1; } Ucet ucetSNejvyssimStavem = Collections.max(seznamUctu, new PorovnavaniUctuDleStavu());

Vnitřní a vnořené třídy

public class Jmeno { Datové atributy Statické datové atributy Statické metody Konstruktory Metody Vnitřní třídy Statické vnitřní třídy (vnořené) } Třída Datové členy Funkční členy Typové členy

Více tříd v jednom zdrojovém souboru Několik samostatných tříd uložených v jednom souboru s koncovkou java A.class B.class C.class V souboru je jedna třída obsahující další A.class A$B.class A$C.class public class A class B class C public class A class B class C A.java

Charakteristika Třídy definované uvnitř jiných tříd Mohou být potomky libovolné viditelné třídy a implementovat libovolné viditelné rozhraní Jsou uvnitř svých vnějších tříd, a proto vidí i na jejich soukromé členy Mohou mít nastaveny kterýkoliv modifikátor přístupu (public, protected, „package private“, private)

Rozdělení Globální (na úrovni atributů a metod) –vnitřní - inner –vnořené – embendded Lokální (uvnitř metod a bloků kódu) –pojmenované –anonymní

Vnořené třídy Deklarovány s modifikátorem static Mohou být vnořené i do rozhraní Jsou to zcela obyčejné třídy se všemi jejich možnostmi a omezeními

Vnitřní třídy Instance vnitřní třídy jsou navázány na instanci vnější třídy Získání instance vnější třídy: Vnější.this Nesmějí mít statické atributy a metody – nevědělo by se, jak moc jsou statické –Pouze v rámci napojené instance –V rámci celé vnější třídy

public class Banka{ // deklarace datových atributů private class PorovnavaniUctuDleAbecedy implements Comparator { public int compare (Ucet prvni, Ucet druhy){ String vlastnikPrvni = prvni.getVlastnik(); String vlastnikDruhy = druhy.getVlastnik(); return vlastnikPrvni.compareTo(vlastnikDruhy); } private class PorovnavaniUctuDleStavu implements Comparator { public int compare (Ucet prvni, Ucet druhy){ if (prvni.getStav() == druhy.getStav()) { return 0; } else { if (prvni.getStav() > druhy.getStav()) { return 1; } else { return -1; } Collections.sort(seznamUctu, new PorovnavaniUctuDleAbecedy()); Ucet ucetSNejvyssimStavem = Collections.max(seznamUctu, new PorovnavaniUctuDleStavu());

Anonymní vnitřní třídy Deklarují se uvnitř metody, většinou jako parametr volané metody. Mají pouze implicitní konstruktor. Překladem vznikne samostatný soubor class pojmenovaný Vnější$pořadové číslo např. Banka$1.class Collections.sort(seznamUctu, new PorovnavaniUctuDleAbecedy()); Collections.sort(seznamUctu, new Comparator (){ public int compare (Ucet prvni, Ucet druhy){ String vlastnikPrvni = prvni.getVlastnik(); String vlastnikDruhy = druhy.getVlastnik(); return vlastnikPrvni.compareTo(vlastnikDruhy); } } );