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.