String string ili znakovni niz (string) nije niz znakova u Javi su stringovi klase String paketa java.lang!!! Usporedba: char gf = G ; Niz znakova String char [] gf = { G, e, o, d, e, t, s, k, i ; String gf = Geodetski ; 1 String ili znakovni niz 2 pomoću string literala (konstanti) String gf; //deklariranje na objekt gf = Geodetski fakultet ; //dodjeljivanje // vrijednosti ili String literal String gf = Geodetski fakultet ; Varijabla tipa String je referenca na objekt tipa String String su nepromjenjivi, tj. sadržaj im se ne može mijenjati, ali se referenca takvog objekta može izmijeniti da ukazuje na neki drugi objekt tipa String!!! String ; referenca objekt = abc ; = efg ; efg abc System.out.println(); efg 3 4 String konstruktori mogu kreirati novi string iz niza znakova String = new String (char nizznakova[]) ; char [] gf = { G, e, o, d, e, t, s, k, i ; String = new String (gf) ; = Geodetski drugih stringova String = new String ( Geodetski fakultet ) ;... Novi prazni string: String s4 = new String () ; 5 char [] gf = { G, e, o, d, e, t, s, k, i ; String = new String (gf, 2, 3) ; = ode Ineks člana niza od kojeg počinje podniz Broj znakova preuzetih iz niza Kreiranjem string objekta od niza uvijek se preuzima samo kopija niza. Ako se po nastanku objekta izmijene članovi izvornog niza, string objekt neće se izmijeniti. 6
String = new String geodezija ; String = new String geodezija ; = geodezija = geodezija String = new String geodezija ; String = ; = geodezija = geodezija geodezija geodezija geodezija 7 8 class SpajanjeStringova{ String = "auto", = "cesta"; Stringovi se mogu povezati pomoću: operatora + String = auto ; String = cesta ; String s3 = + metode concat string1.concat(string2) = auto = cesta s3 = autocesta System.out.println("Test spajanja concat metodom:"); System.out.println(" = " + ); System.out.println(" = " + ); System.out.println(".concat() = " +.concat()); System.out.println("\nPrije spajanja:"); System.out.println(" = " + ); System.out.println(" = " + ); =.concat(); // kreiranje novog objekta i ukazivanje // na taj novi objekt System.out.println("\nNakon spajanja:"); System.out.println(" = " + ); System.out.println(" = " + ); 9 10 Test spajanja: = auto = cesta.concat() = autocesta Prije spajanja: = auto = cesta Nakon spajanja: = autocesta = cesta Prije spajanja Nakon spajanja auto cesta auto cesta Kada je jedan od dva operanda operatora + tipa String, kompajler će drugi operand konvertirati u odgovarajući string class SpajanjeStringova2{ int broj = 2; String = "auto", = "cesta D"; String s3 = + + broj; System.out.println("s3 = " + s3); s3 = autocesta D2 autocesta 11 12
Oprez! Kada u izraz za spajanje stringova umećete druge operacije možete dobiti neočekivane rezultate String s = "cetiri = " + 2 + 2; System.out.println(s); String s = "cetiri = " + (2 + 2); System.out.println(s); cetiri = 22 cetiri = 4 Niz stringova Isti mehanizam koji je korišten za nizove primitivnih tipova podataka String [] ime = new String [3]; ime[0] = a ; ime[1] = b ; ime[2] = c ; ili String [] ime = { a, b, c ; Primjer: class NizStringova{ String [] kvadrant = {"I.", "II.", "III.", "IV."; int brcl = kvadrant.length; // broj clanova niza stringova for(int i=0; i<brcl; i++) // i = indeks clana niza System.out.println("kvadrant ["+i+"]: " +kvadrant[i]); kvadrant [0]: I. kvadrant [1]: II. kvadrant [2]: III. kvadrant [3]: IV. 13 14 Duljina stringa Pomoću metode length() String gf = "Geodetski fakultet"; int len = gf.length(); len = 18 Usporedba stringova Usporedba sadržaja dvaju objekata pomoću metode equals: string1.equals(string2) ako je sadržaj stringova identičan, metoda vraća vrijednost true ako je sadržaj stringova različit, metoda vraća vrijednost false Usporedba, odn. provjera da li dvije varijable referenciraju na isti string, tj. objekt string1 == string2 ako varijable referenciraju na isti objekt vrijednost izraza je true ako varijable referenciraju na različite objekte vrijednost izraza je false 15 16 Usporedba stringova metoda equals class PrimjerEquals{ String = "program"; String = new String("program"); String s3 = ; System.out.println(+" equals "++" > "+.equals()); System.out.println(+" equals "+s3+" > "+.equals(s3)); String s4 = "Program"; System.out.println(+" equals "+s4+" > "+.equals(s4)); program equals program > true program equals program > true program equals Program > false Usporedba stringova operator == class IstiObjekti{ String = "program"; String = new String("program"); String s3 = ; System.out.println( +" = = " + +" > "+( = = )); System.out.println(+" = = "+s3+" > "+( = = s3)); String s4 = "Program"; System.out.println(+" = = "+s4+" > "+( = = s4)); program = = program > false program = = program > true program = = Program > false 17 18
Usporedba stringova Usporedba stringova equals > true equals s3 > true equals s4 > false = = > false = = s3 > true = = s4 > false s3 s4 program program Program Usporedba sadržaja dvaju objekata pomoću metode compareto: string1.compareto(string2) uspoređuje stringove znak po znak prema leksikografskom redoslijedu vraća razliku u leksikografskim položajima (Unicode character set) String = new String("Boris"); String = new String("Ana"); String s3 = new String("Anita"); int r1 =.compareto(); int r2 =.compareto(s3); r1 = 1 r2 = -8 19 20 Substring Konvertiranje podataka metodom valueof podniz nekog stringa dva načina izdvajanje substringa pomoću metode substring: i string.substring(počindeks); string.substring(počindeks, krajindeks); String = "Sjeverna Amerika"; String =.substring(9); String s3 =.substring(9,14); String s4 =.substring(9,10); = Amerika s3 = Ameri s4 = A 21 konvertiranje drugih tipova podataka u string class PrimjerValueOf{ int i = 123456; float f = 1.2345f; double d = Math.PI; System.out.println("int = " + String.valueOf(i)); System.out.println("float = " + String.valueOf(f)); System.out.println("double = " + String.valueOf(d)); int = 123456 float = 1.2345 double = 3.141592653589793 22 StringBuffer objekt String su nepromjenljivi znakovni nizovi fiksne duljine StringBuffer su znakovni nizovi promjenljive duljine koji se mogu mijenjati StringBuffer (Na bilo kojem mjestu unutar objekta klase StringBuffer moguće je umetnuti znak ili substring. Objekt StringBuffer automatski će se proširiti.) StringBuffer se koristi kada se intenzivno modificiraju stringovi dodavanje, brisanje i zamjena substringova u stringu 23 24
Kreiranje StringBuffer objekta Kreiranje StringBuffer objekta U klasi StringBuffer definirana su tri konstruktora: 1. StringBuffer() (pretpostavljeni konstruktor unaprijed rezervira mjesto za fiksnih 16 znakova) 2. StringBuffer(int veličina) (konstruktor koji prihvaća cjelobrojni argument kojim se izričito zadaje veličina buffera) 3. StringBuffer(String niz) (konstruktor koji prihvaća argument tipa String kojim se zadaje početni sadržaj objekta klase StringBuffer i dodatno rezervira mjesto za fiksnih 16 znakova) Primjeri StringBuffer konstruktora: StringBuffer a1, a2, a3; a1 = new StringBuffer(); // kapacitet 16 znakova a2 = new StringBuffer(50); // kapacitet 50 znakova a3 = new StringBuffer( Hello ); // kapacitet 21 znak // 21 = 5 + 16 25 26 Duljina i kapacitet StringBuffer objekta Duljina i kapacitet StringBuffer objekta Svaki StringBuffer karakteriziraju dva parametra: 1. duljina (length) 2. kapacitet (capacity) Duljina StringBuffera je broj trenutačno spremljenih znakova u StringBufferu; određuje se pomoću: string.length() Kapacitet StringBuffera je broj znakova koji se može spremiti bez dodjeljivanja dodatne memorije; određuje se pomoću: string.capacity() StringBuffer gf = new StringBuffer( Geodetski fakultet ); gf.length() je 18 (Unicode characters) G e o d e t s k i f a k u l t e t memorijski spremnik gf.capacity() je 34 (duljina stringa + 16) 27 28 Promjena duljine i kapaciteta StringBuffer objekta class PromjenaDuljiCap{ StringBuffer gf = new StringBuffer("Geodetski fakultet"); System.out.println("Pocetne vrijednosti:"); System.out.println("gf = " + gf); System.out.println("duljina = " + gf.length()); System.out.println("kapacitet = " + gf.capacity()); gf.ensurecapacity(80); // metoda za dodjelu kapaciteta System.out.println("\nNakon promjene kapaciteta:"); System.out.println("gf = " + gf); System.out.println("duljina = " + gf.length()); System.out.println("kapacitet = " + gf.capacity()); Promjena duljine i kapaciteta StringBuffer objekta nastavak s prethodnog slajda: gf.setlength(13); // metoda za promjenu duljine System.out.println("\nNakon promjene duljine:"); System.out.println("gf = " + gf); System.out.println("duljina = " + gf.length()); System.out.println("kapacitet = " + gf.capacity()); 29 30
Promjena duljine i kapaciteta StringBuffer objekta Pocetne vrijednosti: gf = Geodetski fakultet duljina = 18 kapacitet = 34 Dodavanje StringBuffer StringBuffer stud = new StringBuffer( Studij geodezije ); stud.append( i geoinformatike ); stud = Studij geodezije i geoinformatike Nakon promjene kapaciteta: gf = Geodetski fakultet duljina = 18 kapacitet = 80 Nakon promjene duljine: gf = Geodetski fak duljina = 13 kapacitet = 80 31 StringBuffer a = new StringBuffer(); a.append("to"). append(" be"). append(" or").append(" not").append(" to"). append(" be"); a = "To be or not to be" 32 Dodavanje StringBuffer StringBuffer b = new StringBuffer( Broj studenata je ); int broj = 186; b.append(broj); b = Broj studenata je 186 Umetanje StringBuffer StringBuffer u1 = new StringBuffer( Ja Javu ); u1.insert(3, volim ); u1 = Ja volim Javu StringBuffer c = new StringBuffer("Vrijednost je"); boolean d = false; c.append(d); c = "Vrijednost je false" StringBuffer u2 = new StringBuffer("Trokut ima stranice"); u2.insert(11, 3); u2 = "Trokut ima 3 stranice" 33 34