Sunteți pe pagina 1din 8

ROMÂNIA

Universitatea Politehnica din Bucuresti

Facultatea de Antreprenoriat, Ingineria si Managementul


Afacerilor

Programarea Calculatoarelor II - Laboratorul 3

Responsabil: Şl.dr.ing. Bogdan Ţigănoaia, bogdantiganoaia@yahoo.com

Obiectivele laboratorului sunt urmatoarele:

 Lucrul cu siruri de caractere

 Prezentarea claselor String si StringBuffer

 Taskuri

1. Siruri de caractere

Sirurile de caractere in Java sunt manipulate, printre alte metode, cu ajutorul claselor String si
StringBuffer.
Exemplu:

String s = "abc";
String s = new String("abc");
char data[] = {’a’, ’b’, ’c’};
String s = new String(data);

1
Un şir de caractere constant va fi declarat de tipul String, altfel va fi declarat de tip
StringBuffer. StringBuffer pune la dispoziţie metode pentru modificarea conţinutului şirului,
cum ar fi: append, insert, delete, reverse.
Cea mai folosită modalitate de a lucra cu şiruri este prin intermediul clasei String.
Clasa StringBuffer va fi utilizată predominant în aplicaţii dedicate procesării textelor cum ar
fi editoarele de texte.

Concatenarea: +

String s1 = "ab" + "cd";


String s2 = s1 + 123 + "xyz"

Java este extrem de flexibil, permite concatenarea şirurilor cu obiecte de orice tip care au o
reprezentare de tip şir de caractere.

Exemple:

System.out.print("Vectorul v are" + v.length + "elem.");

String x = "a" + 1 + "b“;

Task 1: Studiati si rulati codul de mai jos:

public class Lab3{


public static void main(String[] args) {
String str1 = "Numele meu este Bogdan";
String str2 = "Numele meu este Bogdan";
String str3 = "Numele meu "+ "este Bogdan"; //Compile time expression

String name = "Bogdan";


String str4 = "Numele meu este " + name;
String str5 = new String("Numele meu este Bogdan");

System.out.println("str1 == str2 : "+(str1 == str2));


System.out.println("str2 == str3 : "+(str2 == str3));
System.out.println("str3 == str1 : "+(str3 == str1));

2
System.out.println("str4 == str5 : "+(str4 == str5));
System.out.println("str1 == str4 : "+(str1 == str4));
System.out.println("str1 == str5 : "+(str1 == str5));

System.out.println("str1.equals(str2) : "+str1.equals(str2));
System.out.println("str2.equals(str3) : "+str2.equals(str3));
System.out.println("str3.equals(str1) : "+str3.equals(str1));

System.out.println("str4.equals(str5) : "+str4.equals(str5));
System.out.println("str1.equals(str4) : "+str1.equals(str4));
System.out.println("str1.equals(str5) : "+str1.equals(str5));

}
}
2. Clasa String

Toate sirurile in limbajul Java sunt obiecte ale clasei String. Obiectele din aceasta clasa sunt
constante, adica sirurile continute in ele nu pot fi modificate. Daca este necesar sa se
foloseasca siruri modificabile, se recurge la clasa StringBuffer.
In afara de metodele pe care le ofera, clasa String contine si suportul necesar pentru
operatorul de concatenare'+'. Prin concatenarea a doua siruri se obtine un nou sir,
rezultat din punerea celor doua unul in continuarea celuilalt. De exemplu, expresia
"ABC"+"defg" are ca valoare sirul "ABCdefg".

Construirea unui obiect din clasa sir se face cel mai frecvent cu constructorul
String(String s). Acest constructor creaza in memorie o copie a sirului s primit ca
argument.

Dintre metodele foarte utile mentionam aici urmatoarele:

int compareTo(String anotherString)

Compara acest sir cu sirul anotherString primit ca argument. Daca cele doua siruri sunt
identice, intoarce 0 (zero). Daca acest sir il precede, intoarce o valoare negativa, iar daca ii

3
succede, intoarce o valoare pozitiva. Compararea sirurilor se face in ordine lexicografica (in
ordinea in care ar fi plasate intr-un dictionar).

int compareToIgnoreCase(String str)

Compara lexicografic acest sir cu sirul str primit ca argument, ignorand deosebirea dintre
literele majuscule si cele minuscule.

int length()

Intoarce lungimea acestui sir (numarul de caractere continute).

String trim()

Intoarce un nou sir, obtinut din acest sir prin eliminarea spatiilor de la inceput si de la sfarsit.

String substring(int beginIndex)

Intoarce un nou sir, care contine caracterele acestui sir incepand de la pozitia
beginIndex, pana la sfarsit.

String substring(int beginIndex, int endIndex)

Intoarce subsirul situat intre pozitiile beginIndex si endIndex-1.

Task 2: Studiati cu atentie si rulati urmatorul cod Java:

/* Testarea clasei String */

class TestStr {

public static void main(String args[]) {

String s1="ABCdef#@&", s2, s3, s4;

char ch1[];

byte tb[];

s2=new String("Un sir nou");

System.out.println("s1="+s1+" s2="+s2);

System.out.println("Lungimile sirurilor: s1="+s1.length()+

4
" s2="+s2.length());

System.out.println("Conversie in litere mari: s1="+s1.toUpperCase()+

" s2="+s2.toUpperCase());

System.out.println("Conversie in litere mici: s1="+s1.toLowerCase()+

" s2="+s2.toLowerCase());

ch1=s1.toCharArray();

System.out.print("s1 convertit in tablou de caractere: ");

for(int i=0; i<ch1.length; i++) System.out.print(ch1[i]);

System.out.println(); // trecere la linie noua

tb=s1.getBytes();

System.out.print("s1 convertit in tablou de octeti: ");

for(int i=0; i<tb.length; i++) System.out.print(tb[i]+" ");

System.out.print("\nAcelasi tablou convertit in caractere: ");

for(int i=0; i<tb.length; i++) System.out.print((char)tb[i]);

System.out.println();

s3=String.copyValueOf(ch1);

System.out.println("Sirul obtinut din tabloul de caractere: "+s3);

System.out.println("Comparatii de siruri: "+s1.compareTo(s3)+" "+

s1.compareTo(s2)+" "+s2.compareTo(s1));

System.out.println("s1==s3: "+(s1==s3)+" s1.equals(s3): "+

s1.equals(s3));

s4=s2.toUpperCase();

System.out.println("s2="+s2+" s4="+s4);

System.out.println("s2.equals(s4): "+s2.equals(s4)+

" s2.equalsIgnoreCase(s4): "+s2.equalsIgnoreCase(s4));

5
System.out.println("Subsirul lui s2 intre pozitiile 3 si 8: "+

s2.substring(3,8));

System.out.println("Subsirul lui s2 de la pozitia 3 la sfarsit: "+

s2.substring(3));

3. Clasa StringBuffer

Obiectele clasei StringBuffer implementeaza siruri care pot fi modificate atat ca


lungime, cat si sub aspectul caracterelor pe care le contin. In engleza buffer inseamna zona
tampon. Asadar, un "StringBuffer" este modelul unei zone tampon de memorie in care se
pot adauga noi caractere la sirul existent si in care se pot inlocui total sau partial caracterele
existente cu altele. Principalele operatii asupra unei astfel de "zone tampon" sunt metodele
append() si insert(), prin care se poate adauga un sir nou in coada celui existent, sau
se insereaza acest sir nou in interiorul celui existent.

Un obiect StringBuffer (zona tampon pentru caractere) se caracterizeaza prin lungime


si capacitate. Lungimea este numarul de caractere continut efectiv, iar capacitatea este
dimensiunea la un moment dat a tabloului de caractere continut in obiectul respectiv.
Ambele se pot modifica in timp, ca urmare a aplicarii unor metode. Construirea unui nou
StringBuffer se poate face cu unul din constructorii StringBuffer(),
StringBuffer(int length) sau StringBuffer(String str). Primul
dintre ei construieste o zona tampon de caractere avand o capacitate initiala predefinita, al
doilea una de capacitate initiala length, iar al treilea construieste o zona tampon care
contine initial sirul str.

Cele mai importante metode sunt:


public int length() - intoarce lungimea curenta a sirului (numarul de
caractere existente efectiv in buffer);
public int capacity() - intoarce capacitatea curenta a buffer-ului;
public StringBuffer append(char c) - adauga la buffer caracterul c;
public StringBuffer insert(int offset, char c) - insereaza in
buffer caracterul c pe pozitia offset;
6
public String toString() - intoarce un sir care are acelasi continut cu cel
din acest StringBuffer.

Exista de fapt o familie de metode append() care difera intre ele prin tipul argumentului:
append(boolean b), append(byte b), append(short s), append(int
i), append(long l), append(char c), append(float f),
append(double d),append(String str), append(Object obj).
Toate aceste metode adauga in coada zonei tampon argumentul lor convertit intr-un sir.
Exista, de asemenea, o familie de metode insert(), care difera prin tipul celui de al doilea
argument:
insert(int offset, boolean b), insert(int offset, byte b),
insert(int offset, short s), insert(int offset, int i),
insert, int offset, long l), insert(int offset, char c),
insert(int offset, float f), insert(int offset, double d),
insert(int offset, String str), insert(int offset, Object obj).

Toate aceste metode insereaza in zona tampon, pe pozitia offset, cel de al doilea argument
convertit in sir.

Task 3: Studiati cu atentie si rulati urmatorul cod Java:

/* Testarea clasei StringBuffer */

class TestStrB {
public static void main(String args[]) {
StringBuffer stb1=new StringBuffer(), stb2;
String str1="abcdefg", str2;
double d=3.670283105E-3;
char tc1[]={'A','B','C'}, tc2[]=new char[10];
System.out.println("Lungimea si capacitatea initiala a stb1: "+
stb1.length()+" "+stb1.capacity());
stb1.append(str1);
stb1.append(d);
System.out.println("stb1="+stb1+"\nLungime: "+stb1.length()+
" Capacitate: "+stb1.capacity());
7
str2=stb1.toString(); // Este obligatorie folosirea metodei toString()
System.out.println("Caracterul de indice 3: "+stb1.charAt(3));
stb2=stb1.insert(3, "PQRS");
System.out.println("Dupa insertia sirului PQRS:\nstb1="+stb1+
"\nstb2="+stb2);
stb1.append(tc1);
System.out.println("Dupa adaugarea tabloului tc1, stb1="+stb1);
System.out.println("Lungime: "+stb1.length()+" Capacitate: "+
stb1.capacity());
stb1.delete(3,25);
System.out.println("Dupa eliminarea zonei 3..25: "+stb1);
System.out.println("Lungime: "+stb1.length()+" Capacitate: "+
stb1.capacity());
stb1.reverse();
System.out.println("Dupa inversare stb1="+stb1);
stb1.getChars(1,4,tc2,3);
System.out.println("Dupa extragerea de caractere, lungimea "+
"tabloului tc2: "+tc2.length);
System.out.print("tc2=");
for(int i=0; i<tc2.length; i++) System.out.print(tc2[i]);
System.out.println();
}
}
4. Taskuri

Task 4: Sa se citeasca de la tastatura 2 siruri de caractere constante. Sa se

experimenteze operatiile de: concatenare, inserare, stergere, determinare lungime,

operatii cu substringuri pe cele doua siruri citite de la consola.

Bibliografie: http://www.curs.cs.pub.ro, Severin Bumbaru, Universitatea "Dunarea de Jos" din


Galati

S-ar putea să vă placă și