powerpoint presentationpoincare.matf.bg.ac.rs/~jgraovac/courses/oop/stasa/cas03.pdf · title:...
TRANSCRIPT
![Page 1: PowerPoint Presentationpoincare.matf.bg.ac.rs/~jgraovac/courses/oop/stasa/Cas03.pdf · Title: PowerPoint Presentation Author: Stasa Vujicic Subject: Cas 03 Created Date: 3/9/2013](https://reader036.vdocuments.net/reader036/viewer/2022071212/602756dd8a6b67140a2f73fb/html5/thumbnails/1.jpg)
OBJEKTNO ORIJENTISANO
PROGRAMIRANJE VEŽBE Staša Vujičić Stanković
![Page 2: PowerPoint Presentationpoincare.matf.bg.ac.rs/~jgraovac/courses/oop/stasa/Cas03.pdf · Title: PowerPoint Presentation Author: Stasa Vujicic Subject: Cas 03 Created Date: 3/9/2013](https://reader036.vdocuments.net/reader036/viewer/2022071212/602756dd8a6b67140a2f73fb/html5/thumbnails/2.jpg)
RAD SA PROMENLJIVIM STRINGOVIMA
Objekti klase String ne mogu se promeniti.
Za rad sa stringovima koji mogu direktno da se
modifikuju u Javi postoje dve standardne klase:
StringBuffer i StringBuilder.
Što se tiče operacija koje omogućuju,
ove dve klase se ne razlikuju,
jedina razlika je što se objekti klase StringBuffer
mogu sigurno koristiti od strane više niti.
2/29
![Page 3: PowerPoint Presentationpoincare.matf.bg.ac.rs/~jgraovac/courses/oop/stasa/Cas03.pdf · Title: PowerPoint Presentation Author: Stasa Vujicic Subject: Cas 03 Created Date: 3/9/2013](https://reader036.vdocuments.net/reader036/viewer/2022071212/602756dd8a6b67140a2f73fb/html5/thumbnails/3.jpg)
RAD SA PROMENLJIVIM STRINGOVIMA
Izmenljive stringove treba koristiti kada su česte transformacije stringova – dodavanje, brisanje, menjanje podstringova u stringu.
StringBuffer strbuf = new StringBuffer(“Izmenljivi string”);
Za razliku od klase String, ne moţe se koristiti sledeća notacija:
StringBuffer strbuf = “Izmenljivi string”; 3/29
![Page 4: PowerPoint Presentationpoincare.matf.bg.ac.rs/~jgraovac/courses/oop/stasa/Cas03.pdf · Title: PowerPoint Presentation Author: Stasa Vujicic Subject: Cas 03 Created Date: 3/9/2013](https://reader036.vdocuments.net/reader036/viewer/2022071212/602756dd8a6b67140a2f73fb/html5/thumbnails/4.jpg)
Moguće je sledeće:
String str = “Izmenljivi string”;
StringBuffer strbuf = new StringBuffer(str);
Moguće je i sledeće:
StringBuffer strbuf = null;
StringBuffer strbuf = new StringBuffer(“Izmenljivi string”);
4/29
![Page 5: PowerPoint Presentationpoincare.matf.bg.ac.rs/~jgraovac/courses/oop/stasa/Cas03.pdf · Title: PowerPoint Presentation Author: Stasa Vujicic Subject: Cas 03 Created Date: 3/9/2013](https://reader036.vdocuments.net/reader036/viewer/2022071212/602756dd8a6b67140a2f73fb/html5/thumbnails/5.jpg)
RAD SA PROMENLJIVIM STRINGOVIMA
StringBuffer sadrţi blok memorije koji se naziva buffer, koji moţe i ne mora da sadrţi string.
Ako buffer sadrţi string, on ne mora da zauzima ceo bafer. Dakle, duţina stringa u objektu klase StringBuffer moţe biti različita od duţine bafera sadrţanog u objektu.
Veličina bafera naziva se kapacitetom (capacity) StringBuffer objekta.
5/29
![Page 6: PowerPoint Presentationpoincare.matf.bg.ac.rs/~jgraovac/courses/oop/stasa/Cas03.pdf · Title: PowerPoint Presentation Author: Stasa Vujicic Subject: Cas 03 Created Date: 3/9/2013](https://reader036.vdocuments.net/reader036/viewer/2022071212/602756dd8a6b67140a2f73fb/html5/thumbnails/6.jpg)
RAD SA PROMENLJIVIM STRINGOVIMA
Kada se jednom kreira StringBuffer objekat,
duţina stringa sadrţanog u njemu se moţe dobiti
pozivom metoda length().
StringBuffer strbuf = new
StringBuffer(“String”);
int strlength = strbuf.length();
6/29
![Page 7: PowerPoint Presentationpoincare.matf.bg.ac.rs/~jgraovac/courses/oop/stasa/Cas03.pdf · Title: PowerPoint Presentation Author: Stasa Vujicic Subject: Cas 03 Created Date: 3/9/2013](https://reader036.vdocuments.net/reader036/viewer/2022071212/602756dd8a6b67140a2f73fb/html5/thumbnails/7.jpg)
RAD SA PROMENLJIVIM STRINGOVIMA
7/29
![Page 8: PowerPoint Presentationpoincare.matf.bg.ac.rs/~jgraovac/courses/oop/stasa/Cas03.pdf · Title: PowerPoint Presentation Author: Stasa Vujicic Subject: Cas 03 Created Date: 3/9/2013](https://reader036.vdocuments.net/reader036/viewer/2022071212/602756dd8a6b67140a2f73fb/html5/thumbnails/8.jpg)
RAD SA PROMENLJIVIM STRINGOVIMA
Moţemo eksplicitno da zadamo kapacitet na sledeći način:
StringBuffer newStr = new StringBuffer(50);
/* Kapacitet je 50 Unicode karaktera,
dakle 100 bajtova. Ako se ne navede kapacitet,
podrazumevana vrednost je 16 Unicode karaktera.
Bafer je inicijalno prazan,
tj. ne sadrţi nijedan string. */ 8/29
![Page 9: PowerPoint Presentationpoincare.matf.bg.ac.rs/~jgraovac/courses/oop/stasa/Cas03.pdf · Title: PowerPoint Presentation Author: Stasa Vujicic Subject: Cas 03 Created Date: 3/9/2013](https://reader036.vdocuments.net/reader036/viewer/2022071212/602756dd8a6b67140a2f73fb/html5/thumbnails/9.jpg)
RAD SA PROMENLJIVIM STRINGOVIMA
Metod capacity() vraća kapacitet
bafera.
Metod ensureCapacity() omogućuje da
se promeni podrazumevani kapacitet
StringBuffer objekta.
Specificira se minimalni kapacitet kao
argument metoda. 9/29
![Page 10: PowerPoint Presentationpoincare.matf.bg.ac.rs/~jgraovac/courses/oop/stasa/Cas03.pdf · Title: PowerPoint Presentation Author: Stasa Vujicic Subject: Cas 03 Created Date: 3/9/2013](https://reader036.vdocuments.net/reader036/viewer/2022071212/602756dd8a6b67140a2f73fb/html5/thumbnails/10.jpg)
RAD SA PROMENLJIVIM STRINGOVIMA
Na primer,
newStr.ensureCapacity(40);
/* Ako je tekući kapacitet objekta newStr
manji od 40, kapacitet će biti uvećan
alokacijom novog većeg bafera*/
10/29
![Page 11: PowerPoint Presentationpoincare.matf.bg.ac.rs/~jgraovac/courses/oop/stasa/Cas03.pdf · Title: PowerPoint Presentation Author: Stasa Vujicic Subject: Cas 03 Created Date: 3/9/2013](https://reader036.vdocuments.net/reader036/viewer/2022071212/602756dd8a6b67140a2f73fb/html5/thumbnails/11.jpg)
RAD SA PROMENLJIVIM STRINGOVIMA
Promena duţine stringa u StringBuffer objektu moţe se izršiti pozivom metoda setLength().
Napomena: dužina je karakteristika stringa sadrţanog u StringBuffer objektu, dok je kapacitet karakteristika StringBuffer objekta.
Kada se uvećava duţina stringa u StringBuffer objektu, dodaju se karakteri na postojeći string i svi oni sadrţe „\u0000‟. Češće se ovaj metod koristi za odsecanje stringa. 11/29
![Page 12: PowerPoint Presentationpoincare.matf.bg.ac.rs/~jgraovac/courses/oop/stasa/Cas03.pdf · Title: PowerPoint Presentation Author: Stasa Vujicic Subject: Cas 03 Created Date: 3/9/2013](https://reader036.vdocuments.net/reader036/viewer/2022071212/602756dd8a6b67140a2f73fb/html5/thumbnails/12.jpg)
RAD SA PROMENLJIVIM STRINGOVIMA
Da bi se dodao string na kraj postojećeg stringa u StringBuffer objektu koristi se metod append().
StringBuffer aString = new
StringBuffer(“Primer”); aString.append(“ nadovezivanja”); /* sada aString sadrţi string “Primer
nadovezivanja” */
Kapacitet će se uvek automatski uvećati ako je potrebno prihvatiti veći string. 12/29
![Page 13: PowerPoint Presentationpoincare.matf.bg.ac.rs/~jgraovac/courses/oop/stasa/Cas03.pdf · Title: PowerPoint Presentation Author: Stasa Vujicic Subject: Cas 03 Created Date: 3/9/2013](https://reader036.vdocuments.net/reader036/viewer/2022071212/602756dd8a6b67140a2f73fb/html5/thumbnails/13.jpg)
Metod append() vraća referencu na prošireni
StringBuffer objekat i ona se moţe dodeliti
drugom StringBuffer objektu.
StringBuffer aString = new
StringBuffer(“Primer”);
StringBuffer bString =
aString.append(“ nadovezivanja”);
Sada i aString i bString referišu na isti
StringBuffer objekat 13/29
![Page 14: PowerPoint Presentationpoincare.matf.bg.ac.rs/~jgraovac/courses/oop/stasa/Cas03.pdf · Title: PowerPoint Presentation Author: Stasa Vujicic Subject: Cas 03 Created Date: 3/9/2013](https://reader036.vdocuments.net/reader036/viewer/2022071212/602756dd8a6b67140a2f73fb/html5/thumbnails/14.jpg)
append(String) – dodaje String na kraj
append(String, int, int) – dodavanje
podstringa
append(prim_type) – dodavanje
primitivnog tipa
Dodavanje niza karaktera:
StringBuffer buf = new
StringBuffer(“Test”);
char[] text = {„a‟, „b‟, „c‟, „d‟};
buf.append(text, 1, 2); 14/29
![Page 15: PowerPoint Presentationpoincare.matf.bg.ac.rs/~jgraovac/courses/oop/stasa/Cas03.pdf · Title: PowerPoint Presentation Author: Stasa Vujicic Subject: Cas 03 Created Date: 3/9/2013](https://reader036.vdocuments.net/reader036/viewer/2022071212/602756dd8a6b67140a2f73fb/html5/thumbnails/15.jpg)
RAD SA PROMENLJIVIM STRINGOVIMA
Moţe se pretraţivati bafer u StringBuffer objektu da bi se pronašao odgovarajući podstring metodama:
lastIndexOf(String) – za dati podstring vraća poziciju poslednjeg pojavljivanja.
lastIndexOf(String, int) – pretraga podstringa počev od zadate date pozicije u baferu.
15/29
![Page 16: PowerPoint Presentationpoincare.matf.bg.ac.rs/~jgraovac/courses/oop/stasa/Cas03.pdf · Title: PowerPoint Presentation Author: Stasa Vujicic Subject: Cas 03 Created Date: 3/9/2013](https://reader036.vdocuments.net/reader036/viewer/2022071212/602756dd8a6b67140a2f73fb/html5/thumbnails/16.jpg)
Zamena podstringa u baferu:
![Page 17: PowerPoint Presentationpoincare.matf.bg.ac.rs/~jgraovac/courses/oop/stasa/Cas03.pdf · Title: PowerPoint Presentation Author: Stasa Vujicic Subject: Cas 03 Created Date: 3/9/2013](https://reader036.vdocuments.net/reader036/viewer/2022071212/602756dd8a6b67140a2f73fb/html5/thumbnails/17.jpg)
RAD SA PROMENLJIVIM STRINGOVIMA
Umetanje stringa:insert(int, String)
– prvi argument je indeks pozicije u objektu gde treba umetnuti prvi karakter stringa.
Na primer, ako bafer buf sadrţi string “Ovo je primer”,
naredba: buf.insert(6, “ samo”) će umetnuti string “ samo” počevši od indeksa 6, tako da sada buf sadrţi string “Ovo je samo primer” 17/29
![Page 18: PowerPoint Presentationpoincare.matf.bg.ac.rs/~jgraovac/courses/oop/stasa/Cas03.pdf · Title: PowerPoint Presentation Author: Stasa Vujicic Subject: Cas 03 Created Date: 3/9/2013](https://reader036.vdocuments.net/reader036/viewer/2022071212/602756dd8a6b67140a2f73fb/html5/thumbnails/18.jpg)
setCharAt(int , char) - Promena jednog karaktera u StringBuffer objektu.
deleteCharAt(int) - Brisanje jednog
karaktera. delete(int, int) - Brisanje više
karaktera. Prvi argument je indeks prvog karaktera za brisanje, a drugi je indeks pozicije posle poslednjeg karaktera za brisanje.
reverse() –obrće sekvencu karaktera u
StringBufferu. 18/29
![Page 19: PowerPoint Presentationpoincare.matf.bg.ac.rs/~jgraovac/courses/oop/stasa/Cas03.pdf · Title: PowerPoint Presentation Author: Stasa Vujicic Subject: Cas 03 Created Date: 3/9/2013](https://reader036.vdocuments.net/reader036/viewer/2022071212/602756dd8a6b67140a2f73fb/html5/thumbnails/19.jpg)
RAD SA PROMENLJIVIM STRINGOVIMA
Kreiranje objekta klase String od objekta klase StringBuffer moţe se izvršiti upotrebom metoda toString() klase StringBuffer.
StringBuffer strbuf = new StringBuffer(“Primer stringa”);
String s = strbuf.toString();
Objekat s sada sadrţi string “Primer stringa”.
Metod toString() klase StringBuffer koristi se često od strane kompajlera zajedno sa metodom append() za implementaciju konkatenacije String objekata.
19/29
![Page 20: PowerPoint Presentationpoincare.matf.bg.ac.rs/~jgraovac/courses/oop/stasa/Cas03.pdf · Title: PowerPoint Presentation Author: Stasa Vujicic Subject: Cas 03 Created Date: 3/9/2013](https://reader036.vdocuments.net/reader036/viewer/2022071212/602756dd8a6b67140a2f73fb/html5/thumbnails/20.jpg)
Kada se napiše naredba:
Kompajler će je implementirati kao:
![Page 21: PowerPoint Presentationpoincare.matf.bg.ac.rs/~jgraovac/courses/oop/stasa/Cas03.pdf · Title: PowerPoint Presentation Author: Stasa Vujicic Subject: Cas 03 Created Date: 3/9/2013](https://reader036.vdocuments.net/reader036/viewer/2022071212/602756dd8a6b67140a2f73fb/html5/thumbnails/21.jpg)
ZADATAK
public class StringBufferTest {
/*
* Rad sa objektima klase StringBuffer,
* demonstriranje funkcionalnosti nekih funkcija * za rad sa objektima ove klase.
*/
public static void main(String[] args)
{
StringBuffer recenica = new StringBuffer(20);
System.out.println("Kapacitet StringBuffer objekta je: "+ recenica.capacity()+
" a duzina stringa je: "+recenica.length()); 21/29
![Page 22: PowerPoint Presentationpoincare.matf.bg.ac.rs/~jgraovac/courses/oop/stasa/Cas03.pdf · Title: PowerPoint Presentation Author: Stasa Vujicic Subject: Cas 03 Created Date: 3/9/2013](https://reader036.vdocuments.net/reader036/viewer/2022071212/602756dd8a6b67140a2f73fb/html5/thumbnails/22.jpg)
// Dodajemo reci niza u StringBuffer objekat
String[] niz_reci = {"Ako" , "danas", "bude", "snega", "bicu", "srecan"};
recenica.append(niz_reci[0]);
for(int i = 1 ; i<niz_reci.length ; i++) {
recenica.append(' ').append(niz_reci[i]);
}
22/29
![Page 23: PowerPoint Presentationpoincare.matf.bg.ac.rs/~jgraovac/courses/oop/stasa/Cas03.pdf · Title: PowerPoint Presentation Author: Stasa Vujicic Subject: Cas 03 Created Date: 3/9/2013](https://reader036.vdocuments.net/reader036/viewer/2022071212/602756dd8a6b67140a2f73fb/html5/thumbnails/23.jpg)
System.out.println("\nString koji se nalazi u StringBuffer objektu je:\n" + recenica.toString());
System.out.println("Kapacitet StringBuffer objekta je sada: "+ recenica.capacity()+
" a duzina stringa je: "+recenica.length());
23/29
![Page 24: PowerPoint Presentationpoincare.matf.bg.ac.rs/~jgraovac/courses/oop/stasa/Cas03.pdf · Title: PowerPoint Presentation Author: Stasa Vujicic Subject: Cas 03 Created Date: 3/9/2013](https://reader036.vdocuments.net/reader036/viewer/2022071212/602756dd8a6b67140a2f73fb/html5/thumbnails/24.jpg)
// Vrsimo zamenu neke niske u objektu nekom // drugom
int poz=recenica.lastIndexOf("snega");
recenica.replace(poz, poz+5,"kise");
// Vrsimo umetanje nekih niski u objekat klase // StringBuffer
recenica.insert(recenica.lastIndexOf("srecan"), "ne");
24/29
![Page 25: PowerPoint Presentationpoincare.matf.bg.ac.rs/~jgraovac/courses/oop/stasa/Cas03.pdf · Title: PowerPoint Presentation Author: Stasa Vujicic Subject: Cas 03 Created Date: 3/9/2013](https://reader036.vdocuments.net/reader036/viewer/2022071212/602756dd8a6b67140a2f73fb/html5/thumbnails/25.jpg)
System.out.println("\nString koji se nalazi u StringBuffer objektu je:\n" + recenica);
System.out.println("Kapacitet StringBuffer objekta je sada: "+ recenica.capacity()+
" a duzina stringa je: " + recenica.length());
}
} 25/29
![Page 26: PowerPoint Presentationpoincare.matf.bg.ac.rs/~jgraovac/courses/oop/stasa/Cas03.pdf · Title: PowerPoint Presentation Author: Stasa Vujicic Subject: Cas 03 Created Date: 3/9/2013](https://reader036.vdocuments.net/reader036/viewer/2022071212/602756dd8a6b67140a2f73fb/html5/thumbnails/26.jpg)
VEŢBANJE - ZADATAK 1.
Zadajemo dimenzije i samu matricu sa
standardnog ulaza i ispitujemo da li je
relacija zadata ovom matricom refleksivna
i simetrična.
Treba napisati funkcije za ispitivanje da li
je matrica refleksivna, da li je simetrična i
funkciju za ispis matrice. 26/2
9
![Page 27: PowerPoint Presentationpoincare.matf.bg.ac.rs/~jgraovac/courses/oop/stasa/Cas03.pdf · Title: PowerPoint Presentation Author: Stasa Vujicic Subject: Cas 03 Created Date: 3/9/2013](https://reader036.vdocuments.net/reader036/viewer/2022071212/602756dd8a6b67140a2f73fb/html5/thumbnails/27.jpg)
VEŢBANJE - ZADATAK 2.
Napisati program koji sa standardnog ulaza
učitava granice a i b intervala [a,b] i korak h
i za odabranu polinomijalnu funkciju
(npr. f(x)=x^3-6x+2) računa vrednost
funkcije u tačkama mreţe:
a, a+h, a+2h,..., a+kh, kN,
gde je a+kh<b<a+(k+1)h.
27/29
![Page 28: PowerPoint Presentationpoincare.matf.bg.ac.rs/~jgraovac/courses/oop/stasa/Cas03.pdf · Title: PowerPoint Presentation Author: Stasa Vujicic Subject: Cas 03 Created Date: 3/9/2013](https://reader036.vdocuments.net/reader036/viewer/2022071212/602756dd8a6b67140a2f73fb/html5/thumbnails/28.jpg)
VEŢBANJE - ZADATAK 3.
Učitati redni broj dana u nedelji i ispisati
koji je to dan.
1 ponedeljak
2 utorak
3 sreda
4 četvrtak ...
28/29
![Page 29: PowerPoint Presentationpoincare.matf.bg.ac.rs/~jgraovac/courses/oop/stasa/Cas03.pdf · Title: PowerPoint Presentation Author: Stasa Vujicic Subject: Cas 03 Created Date: 3/9/2013](https://reader036.vdocuments.net/reader036/viewer/2022071212/602756dd8a6b67140a2f73fb/html5/thumbnails/29.jpg)
VEŢBANJE - ZADATAK 4.
Učitati jedan string i jedan ceo broj
i ispisati da li se na tom mestu u stringu
nalazi malo ili veliko slovo, samoglasnik
ili suglasnik.
29/29