Uploaded by Palo Mihálik

ZakladyJavy-a-PrincípyOOP Kacur 2-2023 v47 String

advertisement
1
Základy programovacieho
jazyka Java
Ing. Peter Kačur, September 2021 - December 2022, verzia dokumentu 47
(Tento dokument je možné voľne šíriť iba za podmienky zachovania jeho
pôvodného obsahu v ucelenej nefragmentovanej forme na nekomerčné účely)
192
Reťazcová konštanta(Literal)
 Objekt typu String je na rozdiel od StringBuffer či
StringBuilder nemeniteľný, teda ak dôjde k jeho
zmene, vytvorí sa nová inštancia.
 String objekt vytvárame buď pomocou
úvodzoviek ako reťazcovú konštantu alebo
pomocou operátora new.
 Reťazcová konštanta:
 String s="Ahoj";
 Vždy keď sa vytvorí reťazcová konštanta, JVM
skontroluje Oblasť reťazcových konštánt či sa v
nej už takáto konštanta neneachádza. Ak áno
potom sa vytvorí referencia na ňu a ak nie tak
sa vytvorí nová v tejto oblasti.
1. String s1="Ahoj";
2. String s2="Ahoj"; //nevytvorí sa nová
inštancia iba referencia na už existujúci
reťazec
 Výhoda tohto prístupu je efektívne nakladanie s
pamäťou, bezpečnosť či už vo viac vlákonovom
prístupe alebo pred záškodníkmi a iné.
Obr. 26 : Heap1
193
Objekt String pomocou new
1.public class StringPriklad{
2.public static void main(String args[]){
 Na vytvorenie objektu typu String sa 3.String s1="ahoj"; //literal
4.char ch[]={'r','e','t','a','z','e','c'};
použije normálna hromada mimo
5.String s2=new String(ch); //konvertovanie
oblasti hromady konštánt, avšak
char poľa na string
samotná konštanta "Ahoj" sa
6.String s3=new String("priklad");
umiestní do hromady konštánt.
//vytvorenie stringu ako objektu
Referenčná premnná odkazuje na
7.System.out.println(s1);
objekt v normálnej hromade.
8.System.out.println(s2);
 String s=new String("Ahoj"); //vytvoria
9.System.out.println(s3);
sa dva objekty a jedna referenčná
10.}}
premenná
Výstup:
ahoj
retazec
priklad
194
*Nemeniteľnosť reťazca (Immutable
String)
 String sa zvyčajne používa na
ukladanie prihlasovacích údajov ako
meno a heslo a vďaka nemeniteľsnoti
sú tieto String objekty ochránené
pred nepovolenou zmenou.
1. String s="Červena";
2. s.concat(" Zelená");
//concat() metóda pridá string na
koniec
3. System.out.println(s); //vypíše
iba červená bez zelenej
 Na obrázku je ilustrované čo sa udeje
v pamäti. Pre spojenie treba urobiť
úpravu:
1. s=s.concat(" Zelená"); //explicitné
priradenie do referenčnej premen.
2. System.out.println(s); //vypíše
Červená Zelená
Obr. 29 : Nemeniteľnosť
195
Porovnávanie reťazcov (Comparison)
 Reťazce je možné porovnávať vzhľadom na obsah alebo referenciu podľa
účelu:
 overenie obsahu: metóda equals() - porovná hodnoty dvoch objektov a vráti
ture alebo false
 lexikografické porovnanie(abecedne usporiadaná množina znakov kde sa dá
povedať, ktorý znak je väčší a ktorý menší na základe poradia v abecede, ale aj
dĺžky celého reťazca): metóda compareTo() - porovná dva objekty a zistí, ktorý
je väčší a ktorý je menší
 porovnávanie referencií: operátor ==
196
Porovnávanie reťazcov – equals()
 Metóda equals() slúži na porovnanie hodnôt reťazcov.
 public boolean equals(Object o)
 public boolean equalsIgnoreCase(String s) – ignoruje veľkosti písmen
1.
2.
class TeststPorovnavanie1{
public static void main(String args[]){
1.
class TeststPorovnavanie2{
3.
String f1="Biela";
2.
4.
String f2="Biela";
3.
String f1="Biela";
5.
String f3=new String("Biela");
4.
String f2="BIELA";
6.
String f4="Modra";
5.
System.out.println(f1.equals(f2)); //false
7.
System.out.println(f1.equals(f2)); //true
6.
8.
System.out.println(f1.equals(f3)); //true
System.out.println(f1.equalsIgnoreCase(f2));
//true
9.
System.out.println(f1.equals(f4)); //false
10.
}
11. }
7.
8.
9.
public static void main(String args[]){
}
}
197
Porovnávanie reťazcov – operátor ==
 Operátor == porovnáva referencie a nie hodnoty.
1. class TeststPorovnavanie3{
2. public static void main(String args[]){
3.
String f1="Modra";
4.
String f2="Modra";
5.
String f3=new String("Modra");
6.
System.out.println(f1==f2);//true lebo obidva odkazujú na
rovnaký objekt
7.
System.out.println(f1==f3); //false lebo f3 odkazuje na
inštanciu vytvorenú mimo oblasti konštantných reťazcov
8. }
9. }
198
Porovnávanie reťazcov – compareTo()
 Metóda compareTo() porovnáva reťazcové hodnoty lexikograficky (abecedne)
a vracia celé číslo:
 f1 == f2 : vráti 0
 f1>f2
: vráti kladné číslo
 f1 < f2
: vráti záporné číslo
1. class TeststPorovnavanie4{
2.
public static void main(String args[]){
3.
String f1="Modra";
4.
String f2="Modra";
5.
String f3="Fialova"; //F má menšiu hodnotu (70) v ASCII ako M (77)
6.
System.out.println(f1.compareTo(f2));//0 lebo f1==f2
7.
System.out.println(f1.compareTo(f3));//7 lebo f1>f3
8.
System.out.println(f3.compareTo(f1));//-7 lebo f3<f1
9.
10. }
}
199
Spájanie reťazcov (Concatenation)
 Spájanie reťazcov zabezpečuje spojenie viacerých reťazcov do jedného.
Sú dve cesty spájania:
 operátorom +
 Operácia je realizovaná pomocou triedy StringBuilder alebo StringBuffea a jej metódy
append()
 metódou concat()
Spájanie reťazcov – operátor +
200
1. class TestStringSpajanie1{
2. public static void main(String arg 1. class TestStringSpajanie2{
s[]){
2. public static void main(String arg
3.
String auto="Biele"+" auto";
s[]){
4.
System.out.println(auto);
//Biele auto
5. }
3.
String s=10+20+"Biele"+30+40;
4.
System.out.println(s);//30Biele3
040
6. }
5. }
/*
6. }
Java compiler vykoná v pozadí
nasledovné:
String auto=(new StringBuilder()).append("
Biele").append(" auto).toString();
*/
201
Spájanie reťazcov – metóda concat()
1. class TestStringSpajanie3{
2. public static void main(String args[]){
3.
String farba="Biely ";
4.
String typ="Volkswagen";
5.
String auto=farba.concat(typ);
6.
System.out.println(auto);//Biely Volkswagen
7.
8. }
}
202
Iné spôsoby spájania reťazcov 1
 Na spájanie je možné použiť:
 Metóda append() z triedy StringBuilder
1. StringBuilder s1 = new StringBuilder("Biele");
2. StringBuilder s2 = new StringBuilder(" BMW");
3. StringBuilder s = s1.append(s2);
4. System.out.println(s.toString());
 *Metóda String.format()
1. String s1 = new String("Červeny");
2. String s2 = new String(" Citroen");
3. String s = String.format("%s%s",s1,s2);
4. System.out.println(s.toString());
205
Podreťazec (Substring)
 Podreťazec je výber sekvencie znakov z pôvodného reťazca.
 Pre operáciu výberu podreťazca sa používa vstavaná metóda substring() z
triedy String:
 public String substring(int startIndex)
 startIndex – počitočný index podreťazca, vrátane, teda je inclusive
 metóda vyhadzuje výnimku IndexOutOfBoundException ak je startIndex väčší ako dĺžka
pôvodného reťazca alebo je menší ako nula
 public String substring(int startIndex, int endlIndex)
 endlIndex – je koncový index podreťazca, je exclusive
 metóda vyhadzuje výnimku IndexOutOfBoundException ak je startIndex menší ako nula
alebo väčší ako endlIndex alebo endlIndex je väčší ako pôvodný reťazec
206
Metóda substring()
 Príklad 1. - Inclusive a exclusive:
1. String s="ahoj";
2. System.out.println(s.substring(0,2)); //vráti ah substring a nie aho
 Príklad 2.:
1. public class TestPodretazec{
2. public static void main(String args[]){
3. String s="BielaKia";
4. System.out.println("Pôvodný reťazec: " + s);
5. System.out.println("Podreťazec začínajúci
na indexe 5: " +s.substring(5));//Kia
6. System.out.println("Podreťazec začínajúci
od indexu 0 do 5: "+s.substring(0,5)); //Biela
7. }
8. }
207
Ďalšie užitočné metódy triedy String 1.
 Zmena veľkosti písmen pomocou toUpperCase() a toLowerCase()
1. String s="Peter";
2. System.out.println(s.toUpperCase()); //PETER
3. System.out.println(s.toLowerCase()); //peter
 Odstránenie bielých znakov pred a za reťazcom pomocou trim()
1. String s="
Peter
";
2. System.out.println(s.trim()); //Peter
 Kontrola či reťazec začína alebo končí na dané písmeno či reťazec
pomocou startsWith() alebo endsWith()
1. String s="Peter";
2. System.out.println(s.startsWith("Pe")); //true
3. System.out.println(s.endsWith("r")); //true
208
Ďalšie užitočné metódy triedy String 2.
 Zistenie či je znak na špecifickom indexe pomocou metódy charAt():
1. String s="Peter";
2. System.out.println(s.charAt(0)); //P
3. System.out.println(s.charAt(3)); //e
 Zistenie dĺžky reťazca pomocou metódy length()
1. String s="Peter";
2. System.out.println(s.length()); //5
3. ystem.out.println(s.length()); //5
 Konvertvovanie daného typu ako int, long, float, double, boolean, char a
char array do String pomocou metódy valueOf():
1. int a=12;
2. String s=String.valueOf(a);
3. System.out.println(s+34); //1234
209
Ďalšie užitočné metódy triedy String 3.
 Nahradenie všetkých výskytov prvej sekvencie znakov za druhú sekvenciu
znakov pomocou metódy replace() :
1. String s1="Java je programovací jazyk. Java je platforma. Java je
ostrov.";
2. String replaceString=s1.replace("Java","Káva"); //Nahradí všetky
výskyty "Java" za "Káva"
3. System.out.println(replaceString); //Káva je programovací jazyk. Káva
je platforma. Káva je ostrov.
Download