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í.

Slides:



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

Standardní knihovní funkce pro práci s textovými řetězci
Pro začátek něco lehčího
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ý
Počítače a programování 1 Přednáška 13 Jiří Šebesta.
Programování funkcí v Excelu
Programování 2 Cvičení 5.
Opakování Co je výsledkem následujícího prográmku? my $a="kol"; my $b="o"; $a.= $b; $b.= $a; print "a = $a, b = $b\n"; Vkládání speciálních znaků? Uvozovací.
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ží.
Strukturované datové typy
Algoritmy I Cvičení č. 2. Cíl hodiny Datové typy a přetypování (int, float, double, bool, char, long, short) Konstanty – Celočíselné Desítkové – 15, 0,
Počítače a programování 1. Obsah přednášky Výjimky - základní typy výjimek Způsoby zpracování výjimek.
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.
Programování v C++ Cvičení.
Druhé cvičení Vytváření identifikátorů Datové typy
Programování v Pascalu Přednáška 7
Materiály k přednášce Úvod do programování Ondřej Čepek.
J a v a Začínáme programovat Lucie Žoltá pole řetězec debugr.
J a v a Začínáme programovat Lucie Žoltá metody, objekty, konstruktor.
J a v a Začínáme programovat Lucie Žoltá. Odkazy - oficiální stránky (překladače, help, metody, vývojové prostředí NetBeans,...)
Práce se soubory. * soubory patří k základním datovým prvkům v počítači * převážná většina programovacích jazyků má podporu určité formy práce se soubory.
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro práci se soubory 13 Verze
C# - znakové typy a řetězce
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 jako zdroj funkcionality
Datové typy a práce s nimi
Návrh a tvorba WWW Přednáška 11
Počítače a programování 1
Proměnné v PHP Každý programovací jazyk pracuje s nějakými hodnotami. To, do čeho se tyto hodnoty ukládají, se nazývá proměnné. Každý programovací jazyk.
JavaScript Podmínky, cykly a pole.
Cvičení.
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í.
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.
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.
Sedmé cvičení Soubory Vstupně/výstupní proudy. Java cv72 Soubory Třída File Objekt popisující soubor na filesystému Nedá se z něho přímo číst a psát Představuje.
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.
Rozpoznávání v řetězcích
KIV/PPA1 cvičení 6 Cvičící: Pavel Bžoch. Osnova cvičení Datový typ pole –Jednorozměrná a vícerozměrná –Práce s vektory a maticemi.
Práce s řetězci Řetězec je libovolný text nebo libovolná skupina znaků. Řetězec se také označuje jako string. Činnosti prováděné s řetězci: Počítání znaků.
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.
VISUAL BASIC PRALG.
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.
Ukazatele, řetězce Přednáška č. 3. Ukazatele  Ukazatel (pointer) – typ o velikosti 4 bajty (v 32bit. systémech) pro uložení adresy objektu na který ukazuje.
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
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část I.
Řetězce String. Co je to řetězec Jako řetězec označujeme pojmenovanou skupinu libovolných znaků Deklarujeme jej pomocí příkazu Délka řetězce není v tomto.
Fce VB - matematické Abs( výraz ) Fix( výraz ) Int( výraz) Sgn(výraz )
Programovací jazyk C# 2. část. Datové typy C# rozeznává dva druhy datových typů, hodnotové a referenční. Hodnotové datové typy Proměnné hodnotového datového.
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é.
Programování ENUM, SWITCH,pole jednorozměrná a vícerozměrná, deklarace, inicializace, kopírování, porovnání Erik Král.
Programovací jazyk C++
Výukový materiál zpracován v rámci projektu
Úvod do programování 6. hodina
Vzorové řešení zápočtového testu
Algoritmizace a programování
Řetězce (24) Funkce strchr: deklarována v: string.h
Řetězce (1) Řetězec (string) je posloupnost znaků (hod-not typu char)
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
CU01 Informatika II 2/13 Základy algoritmizace
Transkript prezentace:

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í metody pro práci se znaky

Řetězce Základní pojmy: Řetězec je posloupnost znaků V Javě je řetězec samostatný objekt a ne pole znaků jako v jiných programovacích jazycích V Javě existují dva typy řetězců : Konstantní (instance třídy String ) – jednou vytvořený řetřzec již nelze měnit Řetězec proměnné délky (instance třídy StringBuffer) – délku řetězce je možné během výpočtu měnit Existují konverze mezi oběma typy V obou případech překročení mezí řetězce = výjimka StringIndexOutOfBoundsException

Vytvoření řetězce Deklarace řetězce a vytvoření String pozdrav = ”Hi, there!” Kromě základního vytvoření řetězce existuje řada dalších konstruktorů – viz příklady Index znaku uvnitř řetězce je celočíselný a začíná hodnotou 0

Příklad vytvoření řetězců char[] znaky = {'E', 'v', 'a'}; char[] cbajty = {'M', 'a', 'r', 't', 'i', 'n', 'a'}; StringBuffer buf = new StringBuffer("dobry den"); s1 = new String("cao"); System.out.println("s1:" + s1); s2 = new String(s1); s3 = new String(znaky); s4 = new String(znaky, 1, 2); s5 = new String(bajty); s6 = new String(bajty, 3, 4); s7 = new String(buf);

Příklad vytvoření řetězců Vytiskneme-li předchozí řetězce např pomocí System.out.println("s1:" + s1); dostaneme: S1:cao S2:cao S3:Eva S4:va S5:Martina S6:tina S7:dobry den

Řetězce Zjištění aktuální délky řetězce – metoda length() System.out.println("s7 = " + s7.length ); vypíše s7=9 Inicializované pole řetězců String[] pole = {"Dana", "Eva", "Martina"}; for (int i = 0; i < pole.length; i++) System.out.println(pole[i]);

Práce s celými řetězci - porovnávání compareTo(String s) – porovná lexikograficky dva řetězce compareToIgnoreCase(String s) – porovná lexikograficky dva řetězce, nerozlišuje velká a malá písmena Obě metody vrací int číslo s hodnotou : 0 jsou-li řetězce shodné < 0 je-li s větší > 0 je-li s menší

Řetězce – porovnávání equals(String s) – zjistí zda jsou řetězce shodné equalsIgnoreCase(String s) - zjistí zda jsou řetězce shodné, neuvažuje velká a malá písmena Obě metody vrací true v případě shody obou řetězců false v případě neshody

Řetězce – převody malá/velká písmena toLowerCase() – převádí všechny znaky řetězce na malá písmena toUpperCase – převádí všechny znaky řetězce na velká písmena Příklad: String s = ” mala a VELKA”; System.out.println(s.toLowerCase()); // mala a velka System.out.println(s.toUpperCase()); // MALA A VELKA

Řetězce - spojení Je možné použít buď operátor + nebo metodu concat(String s). V obou případech se vytvoří řetězec třetí – spojované řetězce se nezmění Př: String s1 = ”mala a”; String s2 = ”VELKA”; String s3,s4; s3 = s1 + s2; s4 = s1.concat(s2); System.out.println(s3); // ” mala a VELKA ” System.out.println(s4); // ” mala a VELKA ”

Náhrada znaků v řetězci replace(char oldchar, char newchar) – nahradí všechny výskyty znaku oldchar znakem newchar, vytvoří nový řetězec s nahrazenými znaky Příklad: String s2, s1 = ”cacao”; s2 = s1.replace(’c’,’k’); System.out.println(s1); // ”cacao” System.out.println(s2); // ”kakao”

Práce s částí řetězce substring(int beginIndex) – vrací nový řetězec, který je podřetězcem původního a začíná v pozici beginIndex substring(int beginIndex, int endIndex) – vrací nový řetězec, podřetězec původního, který začíná v pozici beginIndex a končí v pozici endIndex-1 Příklad: String s2, s3, s1 = ”mala a VELKA”; s2 = s1.substring(5); s3 = s1.substring(5,9); System.out.println(s2); // ”a VELKA” System.out.println(s3); // ”a VE ”

Práce s částí řetězce getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)  kopíruje znaky z řetězce do pole znaků dst. Znaky řetězce jsou kopírovány od pozice srcBegin do pozice srcEnd-1. V poli dst se znaky ukládají počínaje pozicí dstBegin. !!! Pozor !!! v následujících případech muže dojít k výjimce IndexOutOfBoundsException : IndexOutOfBoundsException 1. srcBegin je záporné 2. srcBegin je větší než srcEnd 3. srcEnd je větší než délka řetězce 4. dstBegin je záporné 5. dstBegin+(srcEnd-srcBegin) je větší než dst.length

Práce se začátkem a koncem řetězce startsWith(String pr) – vrací true pokud řetězec začína s prefixem pr endWidth(String sf) – vrací true pokud řetězec končí suffixem sf Příklad: String s = "mala a VELKA"; if (s.startsWith("mala") == true) System.out.println("Zacina na \"mala\""); if (s.endsWith("mala") == false) System.out.println("Nekonci na \"mala\""); Vypíše: Zacina na ”mala” Nekonci na ”mala”

Oříznutí bílých znaků na okrajích Pokud pracujeme s řetězcem načteným ze vstupu potřebujeme se zbavit bílých znaků na okrajích řetezce trim() – metoda vrací kopii řetězce ze kterého byly odebrány bílé znaky (mezery, tabulátory,nové řádky) Příklad: String s2, s1 = "\r\n\t ahoj\t \r\n"; s2 = s1.trim(); System.out.println("Zacatek:" + s1 + ":konec"); System.out.println("Zacatek:" + s2 + ":konec"); Vypíše: Zacatek: ahoj :konec Zacatek:ahoj:konec

Práce s jednotlivými znaky řetězce – získání znaku charAt( int index) –vrací znak řetězce v pozici index !!! Pozor !!! Může dojít k výjimce IndexOutOfBoundsException, pokud je hodnota proměnné záporná nebo větší než délka řetězceIndexOutOfBoundsException Příklad: String s = "mala a VELKA"; System.out.println(s.charAt(7)); // vytiskne znak V

Práce s jednotlivými znaky řetězce – hledání znaku int indexOf(String str) – vrací index prvního výskytu podřetězce str nebo -1 pokud se podřetězec v řetězci nevyskytuje int indexOf(String str, int fromIndex) – vrací index prvního výskytu podřetězce str nebo -1 pokud se podřetězec v řetězci nevyskytuje. Hledání podřetězce začíná v pozici fromIndex int lastIndexOf(int ch) – vrací index posledního výskytu znaku ch v řetězci nebo -1 pokud se znak v řetězci nevyskytuje int lastIndexOf(int ch, int fromIndex) – vrací index prvního výskytu znaku ch v řetězci (od pozice fromIndex směrem k počátku) nebo -1 pokud se znak v řetězci nevyskytuje.

Příklad: String s = "mala a VELKA"; int i; i = s.indexOf('a'); System.out.println("Prvni a je na " + i + ". pozici"); i = s.indexOf('a', i + 1); System.out.println("Dalsi a je na " + i + ". pozici"); i = s.lastIndexOf('a'); System.out.println("Posledni a je na " + i + ". pozici"); i = s.lastIndexOf('a', i - 1); System.out.println("Predposledni a je na "+ i +". pozici"); Vypíše: První a je na 1. pozici Další a je na 3. pozici Poslední a je na 5. pozici Predposledni a je na 3. pozici

Konverze základních datových typů na řetězec Jakýkoliv základní datový typ (od boolean po double) je možné konvertovat na řetězec pomocí statické metody valueOf() !!!Pozor!!! Metoda je statickou metodou třídy - je nutné ji volat jako String.valueOf(…) Pokud tiskneme pomocí System.out.println() volá se valueOf() automaticky Nejčastější použití – formátování výsledků před tiskem

Příklad použití valueOf() boolean b = true; int i = ; double d = Math.PI; String s; s = String.valueOf(b); System.out.println("b: " + s); s = String.valueOf(i); System.out.println("i: " + s); s = String.valueOf(d); System.out.println("d: " + s);

Formátování výsledků – pomocí valueOf() String s; int i; System.out.println(Math.PI); // s = String.valueOf(Math.PI); i = s.indexOf('.'); s = s.substring(0, i + 6); System.out.println(s); //

Konverze řetězce na základní datové typy Pro převod řetězce na základní datové typy se používají metody tříd Boolean, Byte, Short, Integer, Long, Float a Double z balíku java.lang – třídy obsahují metodu valueOf(String s), která vrací řetězec zkonvertovaný na objekt příslušného dat. typu – pak konverze metodou xxxValue() (xxx je odpovídající datový typ) Příklad : double d1 = Double.valueOf("3.14").doubleValue(); double d2 = new Double("3.14").doubleValue(); boolean b = Boolean.valueOf("true").booleanValue(); int i = Integer.valueOf("123").intValue();

Konverze řetězce na základní datové typy valueOf(String s, int radix) vrací hodnotu řetězce vyjádřenou v soustavě radix. Lze použít pouze pro třídy Byte, Short, Integer a Long parseXXX(String s) parseXXX(String s, int radix) – obě metody pracují podobně jako valueOf(). Lze použít pouze pro třídy Byte, Short, Integer a Long Příklad: long l1 = Long.parseLong("12345"); long l2 = Long.parseLong("1A2B", 16);

Volání více metod jedním příkazem Většina metod třídy String vrací objekt třídy String tj. vytvoří nový řetězec – metody je možné zřetězit bez uložení výsledku do pomocné proměnné Příklad: String s1 = "\r\n\t cacao\t \r\n"; int i; i = s1.trim().toUpperCase().substring(2).indexOf('O'); System.out.println("O je " + (i + 1) + ".znak"); Výsledek: "cacao" po trim() "CACAO" po toUpperCase() "CAO" po substring(2) a pak se hledá pozice znaku 'O'

Třída StringBuffer Poskytuje typ “měnitelný řetězec” – umožňuje libovolnou změnu jednotlivých znaků řetězce popř. změnu délky Konstruktory: StringBuffer() – vytvoří neinicializovaný řetězec s počáteční délkou 16 znaků StringBuffer(int length) – vytvoří neinicializovaný řetězec o počáteční délce length. !!!Pozor !!! - výjimka NegativeArraySizeException pokud je length menší než nula. NegativeArraySizeException StringBuffer(String str) – vytvoří inicializovaný řetězec o délce která je rovna str.length + 16 znaků. Řetězec je inicializován na sekvenci str. !!! Pozor !!! - výjimka NullPointerException pokud je str rovno null NullPointerException

Délka řetězce a změna kapacity int length() – vrací délku řetězce tj. počet znaků int capacity() – vrací kapacitu řetězce tj. maximální možnou délku void ensureCapacity(int k) – mění kapacitu řetězce následujícím způsobem: Je-li k menší než současná capacita zůstane řetězec nezměněn Je-li k větší než současná kapacita bude nová kapacita rovna maximu z velikosti k a z dvojnásobku současné kapacity + 2 znaky. void setLength(int k) – mění délku i kapacitu řetězce následovně: Je-li k větší než současná kapacita, zvětší se délka řetězce na k a kapacita na dvojnásobek současné kapacity + 2 znaky Je-li k menší než současná kapacita poonechá kapacitu nezměněnou a délku nastaví na k

Změna celého řetězce a jeho částí StringBuffer reverse() – otočí řetězec t.j pokud měl původní řetězec délku n bude se znak v pozici k po provedení metody reverse nacházet pozici n-k-1 StringBuffer append(typ t) – na konec původního řetězce je přidán řetězec odpovídající hodnotě t. Parametr t může být libovolný základní datový typ. StringBuffer delete(int start,int end) – odstraní znaky řetězce od pozice start do pozice end-1. StringBuffer deleteCharAt(int index) - zruší znak v pozici index. !!! POZOR!!! Výjimka StringIndexOutOfBoundsException je-li index záporný nebo větší než délka řetězce StringIndexOutOfBoundsException