Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

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

Podobné prezentace


Prezentace na téma: "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í."— Transkript prezentace:

1 Počítače a programování 1 8.přednáška

2 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

3 Ř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

4 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

5 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);

6 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

7 Ř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]);

8 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ší

9 Ř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

10 Ř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

11 Ř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 ”

12 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”

13 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 ”

14 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

15 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”

16 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

17 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

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

19 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

20 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

21 Příklad použití valueOf() boolean b = true; int i = 1234567; 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);

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

23 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();

24 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);

25 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'

26 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

27 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

28 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


Stáhnout ppt "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í."

Podobné prezentace


Reklamy Google