Sunteți pe pagina 1din 23

Curs: Core Java Programing

Module: Tipurile de date obiectuale


Unitate: Stringurile

Stringurile reprezintă un tip de dată ce posedă caracteristici atât ale


tipurilor primitive, cât și ale obiectelor. Strict vorbind, stringul este un
obiect definit de clasa String. Un obiect string reprezintă o secvență de
caractere și aproape toate limbajele oferă această opțiune, fiindcă este
mai convenabil să lucrezi cu o colecție decât cu fiecare caracter
separat. Java are de asemenea mecanisme încorporate pentru
convertirea unui string într-un șir de caractere primitive și viceversa.

Java oferă o funcție specială a clasei String, ce permite obiectelor de


tip string să se comporte ca tipurile primitive. Un obiect string poate fi
creat utilizând caracterul =, iar stringurile pot fi concatenate utilizând
caracterul +. Dacă utilizăm + cu orice alt tip, vom cauza fie o eroare în
timpul execuției, fie o operație de adunare asupra unor tipuri ce nu
susțin acest lucru.

Crearea stringurilor

Cea mai comună metodă pentru crearea stringurilor este:

String message = "Hi!";

În exemplul de mai sus, am declarat o variabilă de tip string cu


denumirea message și valoarea Hi!. Deși tipul string nu este primitiv,
limbajul Java ne permite să-l creăm ca și cum ar fi astfel. Această
construcție a stringurilor se numește implicită.

La fel ca în cazul oricărui alt obiect, un string poate fi creat cu ajutorul


cuvântului cheie new. Să vedem un exemplu:

String word = new String("Hi!");

În linia anterioară, am creat un obiect de tip string utilizând cuvântul


cheie new și transmițând o valoare constructorului. O astfel de
construcție se numește explicită.

Există o diferență importantă între aceste două metode de creare a

© Copyright Link group 1 / 23


Curs: Core Java Programing
Module: Tipurile de date obiectuale
Unitate: Stringurile

stringurilor. În construcția implicită, Java are un mecanism special


pentru salvarea valorilor de tip string. Valorile textuale definite implicit
(fără un constructor) sunt salvate într-o secțiune specială numită
Common pool. Dacă definim două variabile de tip string cu aceeași
valoare, vor împărtăși același conținut în Common pool.

Pe de altă parte, obiectele de tip string create cu ajutorul cuvântului


cheie new și a constructorului vor fi stocate în heap, iar Common pool
nu va exista pentru ele, deoarece există pentru stringurile create în
același mod ca tipuri primitive.

Pentru a clarifica acest aspect, vom arăta câteva stringuri definite în


moduri diferite. În Figura 1, vom ilustra metoda de salvare a acestor
valori în memorie.

String s1 = "Hello";
String s2 = "Hello";
String s3 = s1;
String s4 = new String("Hello");
String s5 = new String("Hello");

Imaginea 20.1 Diferența dintre construcția implicită și explicită a


stringurilor

© Copyright Link group 2 / 23


Curs: Core Java Programing
Module: Tipurile de date obiectuale
Unitate: Stringurile

Concatenarea stringurilor

În introducerea acestei lecții am menționat că Java permite funcția de


concatenare. Când dorim să concatenăm un string cu un alt string,
folosim caracterul + sau metoda specială concat.

String myString = "My ";


String myString1 = "string";
System.out.println(myString+myString1);

Sau:

String myString = "My ";


String myString1 = "string";
System.out.println(myString.concat(myString1));

Ambele tehnici funcționează bine, însă doar pe termen scurt. Pentru o


concatenare mai serioasă a stringurilor, aceste metode nu sunt bune,
fiindcă nu concatenează un string cu un string existent, ci creează un
nou obiect string în memorie, al cărui conținut este alcătuit din cele
două stringuri concatenate. Aceasta este o consecință a faptului că
stringul nu este un obiect mutabil, ceea ce înseamnă că, după creare,
conținutul său nu se mai poate modifica. Aceasta în schimb înseamnă
că construcția unui mare număr de stringuri cu metoda concatenării va
duce la acumularea obiectelor string în memorie.

Vom rezolva acest lucru prin utilizarea clasei StringBuilder care este de
fapt o listă de stringuri reprezentate printr-un singur obiect. Utilizând
această clasă, vom reduce semnificativ consumul de memorie în
timpul concatenării stringurilor și vom crește lizibilitatea codului.
Următorul exemplu va da același rezultat ca cel anterior, doar că de
această dată vom utiliza clasa StringBuilder:

StringBuilder sb = new StringBuilder();


sb.append("My ");
sb.append("string");

© Copyright Link group 3 / 23


Curs: Core Java Programing
Module: Tipurile de date obiectuale
Unitate: Stringurile

System.out.println(sb);

Această modalitate de gestionare a stringurilor este considerată cea


mai bună atunci când vorbim de concatenare.

Funcțiile stringurilor

După cum am spus deja, tipul string este un tip de date complex în
Java, fiind un tip de obiect. Acest lucru ne permite ca asupra
variabilelor de acest tip să apelăm diverse metode pentru procesarea
valorilor acestor variabile. În partea următoare, vom utiliza câteva
dintre cele mai utilizate metode pentru procesarea stringurilor. Una
dintre metode este un bloc de cod ce efectuează o anumită funcție.
Metoda poate avea parametri de intrare și de ieșire, însă acest lucru nu
este obligatoriu. Parametrii de intrare, dacă aceștia există, sunt
introduși între paranteze după denumirea metodei. Parametrii de ieșire
reprezintă rezultatul de execuție a metodei.

toCharArray()

Dacă dorim să tratăm o valoare textuală de tip string ca șir, va trebui


să convertim mai întâi stringul într-o secvență de caracteri. Putem face
acest lucru utilizând metoda toCharArray.

String word = "Hello";


char[] charArray = word.toCharArray();

for (int i = 0; i < charArray.length; i++) {


System.out.println(charArray[i]);
}

Codul de mai sus ilustrează utilizarea metodei toCharArray, pe care am


utilizat-o pentru a converti un string într-un șir de caractere. Mai apoi,
am utilizat o buclă for pentru a lista caracterele și pentru a afișa

© Copyright Link group 4 / 23


Curs: Core Java Programing
Module: Tipurile de date obiectuale
Unitate: Stringurile

rezultatele la ieșire.

length()

Această metodă se utilizează pentru a obține informații despre


lungimea unei variabile de tip string. Funcția returnează numărul de
caractere conținut de obiectul string. Haideți să privim următorul cod:

public static void main(String args[]) {

String word = "Hello";


int len = word.length();
System.out.println( "String length is : " + len );

După execuția codului anterior, vom obține următorul rezultat la ieșire:

String Length is 5

toUpperCase()

Această funcție convertește în majuscule toate caracterele stringului


transmis. Bineînțeles, această funcție ia în considerare doar
caracterele literale, așadar caracterele care nu sunt litere vor rămâne
nemodificate. Să privim următorul exemplu:

public static void main(String[] args) {


String str = "Welcome to ITA!";

System.out.print("Return Value : ");


System.out.println(str.toUpperCase());

© Copyright Link group 5 / 23


Curs: Core Java Programing
Module: Tipurile de date obiectuale
Unitate: Stringurile

Rezultatul la ieșire este:

Return Value : WELCOME TO ITA!

toLowerCase()

Analoagă funcției anterioare, funcția toLowerCase() efectuează


operația opusă, convertind toate caracterele literale în minuscule.

public static void main(String[] args) {


String str = "Welcome to ITA!";

System.out.print("Return Value : ");


System.out.println(str.toLowerCase());
}

Rezultatul ieșirii este următorul:

Return Value : welcome to ita!

trim()

Metoda trim() se folosește pentru a tăia caracterele goale de la


începutul și finalul unui string. Să privim următorul exemplu:

public static void main(String[] args) {

String Str = " Welcome to ITAcademy ";

© Copyright Link group 6 / 23


Curs: Core Java Programing
Module: Tipurile de date obiectuale
Unitate: Stringurile

System.out.print("Return Value :");


System.out.println(Str.trim());
}

Puteți vedea că am inițializat stringul în exemplul de mai sus prin


introducerea unui anumit număr de caractere goale la începutul și
sfârșitul stringului. Haideți să vedem rezultatul acestei metode:

Return Value :Welcome to ITAcademy

După cum puteți vedea, am obținut un string ”trunchiat” la ieșire, un


string fără spații goale la început și la sfârșit.

Această metodă se folosește adesea pentru validarea unei introduceri


de client, mai ales în aplicațiile Web. Să ne imaginăm că sistemul are o
astfel de validare de client, unde "mypassword" și "my password " nu
este același lucru. În astfel de cazuri, un client poate încerca să facă
autentificarea cu date care, deși valide, nu pot trece cu succes
validarea de sistem.

indexOf()

Metoda indexof() are câteva variații, respectiv moduri de funcționare,


în funcție de numărul și tipul de parametrii transmiși. Putem confirma
acest lucru cu ajutorul mediului de dezvoltare NetBeans:

© Copyright Link group 7 / 23


Curs: Core Java Programing
Module: Tipurile de date obiectuale
Unitate: Stringurile

Imaginea 20.2 Metoda indexOf

indexOf(int ch) – în cazul în care metoda acceptă un caracter


ca parametru, aceasta îi returnează indexul în cadrul stringului;
să nu vă inducă în eroare faptul că așteaptă o valoare de tip int
ca parametru de intrare; fiecare caracter are un anumit cod în
UNICODE care îl reprezintă; de exemplu, caracterul "A" are
valoarea zecimală 65 în UNICODE, așadar putem transmite atât
valoarea întreagă a codului, cât și caracterul însuși; în cazul în
care caracterul nu este găsit în cadrul stringului, funcția va
returna -1

indexOf(String str) – funcția caută dacă stringul transmis


este localizat într-un alt string; funcția returnează ca valoare
indexul de unde începe stringul dorit; dacă stringul nu este
găsit, funcția va returna -1

indexOf(String str, int fromIndex) – această metodă


funcționează la fel ca cea anterioară, cu excepția faptului că
stringul transmis va fi căutat de la indexul transmis în raport cu
parametrul fromIndex; dacă stringul nu este găsit, funcția
returnează -1

indexOf(int ch, int fromIndex) – similar cu funcția


anterioară, această funcție caută caracterul transmis în cadrul
stringului, cu excepția faptului că începe căutarea de la indexul
marcat cu parametrul fromIndex

Pentru a clarifica, haideți să privim următorul exemplu:

© Copyright Link group 8 / 23


Curs: Core Java Programing
Module: Tipurile de date obiectuale
Unitate: Stringurile

public static void main(String[] args) {


String str = "Welcome to ITAcademy";
String subStr1 = "ITAcademy";
String subStr2 = "ITAcademy.com";

System.out.print("Found Index :");


System.out.println(str.indexOf('o'));
System.out.print("Found Index :");
System.out.println(str.indexOf('o', 5));
System.out.print("Found Index :");
System.out.println(str.indexOf(subStr1));
System.out.print("Found Index :");
System.out.println(str.indexOf(subStr1, 15));
System.out.print("Found Index :");
System.out.println(str.indexOf(subStr2));

Rezultatul la ieșire este:

Found Index :4
Found Index :9
Found Index :11
Found Index :-1
Found Index :-1

charAt()

Această metodă returnează un caracter care se află la un anumit index


în cadrul stringului. Sintaxa acestei metode arată astfel:

public char charAt(int index)

După cum putem vedea, această metodă necesită ca parametru o

© Copyright Link group 9 / 23


Curs: Core Java Programing
Module: Tipurile de date obiectuale
Unitate: Stringurile

valoare de tip int ce reprezintă indexul caracterului și returnează o


valoare de tip char. Să privim utilizarea acestei metode într-un
exemplu:

public static void main(String[] args) {


String s = "This is string";
char result = s.charAt(8);
System.out.println(result);
}

La ieșire vom obține valoarea 's', deoarece caracterul 's' se află


localizat pe poziția 8. Acordați atenție faptului că indexarea șirurilor
începe de la zero (0), așadar al nouălea caracter se află pe poziția
indexului 8 (chiar și un spațiu gol reprezintă un caracter.

substring()

Această metodă are două variații, în funcție de parametrii de intrare:

- public String substring(int beginIndex)


- public String substring(int beginIndex, int endIndex)

Aceste metode extrag un anumit string dintr-un string existent. Este


logic ca aceste metode să aibă o valoare de tip string ca valoare de
returnare.

Prima metodă acceptă doar un parametru care marchează începutul


unui nou string. Acest lucru înseamnă că noul string va fi creat de la
indexul specificat până la finalul stringului sursă.

Metoda substring() utilizează și indexul de final, pe lângă indexul


inițial, așadar noul string va fi alcătuit din caracterele aflate începând
cu primul index şi terminând cu caracterele până la cel de-al doilea
index, însă neincluzând caracterul corespunzător celui de-al doilea

© Copyright Link group 10 / 23


Curs: Core Java Programing
Module: Tipurile de date obiectuale
Unitate: Stringurile

index.

Haideți să vedem cum se utilizează această metodă în ambele


variante:

public static void main(String[] args) {

String str = "Welcome to ITAcademy";

System.out.print("Return Value :");


System.out.println(str.substring(10));

System.out.print("Return Value :");


System.out.println(str.substring(10, 14));
}

La ieșire vom obține acest rezultat:

Return Value : ITAcademy


Return Value : ITA

equals()

Metoda equal se folosește pentru a verifica egalitatea a două stringuri.


Haideți să privim un exemplu:

public static void main(String[] args) {


String str1 = "First value";
String str2 = "Second value";
String str3 = new String("First value");
String str4 = new String("Second value");

boolean retVal = str1.equals(str3);


System.out.println(retVal);

© Copyright Link group 11 / 23


Curs: Core Java Programing
Module: Tipurile de date obiectuale
Unitate: Stringurile

retVal = str1.equals(str2);
System.out.println(retVal);}

În codul de mai sus, am declarat patru variabile de tip string, unde


primul și al treilea, și al doilea și al patrulea au aceeași valoare. Primele
două valori sunt create implicit, iar celelalte două valori explicit.

Metoda equals returnează valori de tip boolean (true sau false) ca


rezultat al procesării sale. La ieșire vom obține următorul rezultat:

true
false

Concluzia este că, indiferent de metoda în care am creat o valoare


textuală, dacă utilizăm metoda equals, vom obține întotdeauna o
valoare de returnare ce corespunde cu realitatea.

Pentru a compara stringurile, putem utiliza caracterul pentru egalitate


logică (==). Cu toate acestea, abordarea menționată nu este
recomandată, fiindcă în acest mod, comparăm doar adresele unde
aceste două obiecte sunt localizate, având în vedere că o variabilă
păstrează valoarea adresei unui obiect. Metoda equals compară
stringurile caracter cu caracter, ceea ce este cea mai bună metodă de
comparare a stringurilor.

Haideți să privim următorul exemplu, unde comparațiile utilizând


ambele metode vor da rezultate diferite, deși stringurile pe care le
comparăm sunt identice:

public static void main(String[] args) {


String str1 = "First value";
String str2 = new String("First value");

System.out.println(str1.equals(str2));
System.out.println(str1 == str2);}

© Copyright Link group 12 / 23


Curs: Core Java Programing
Module: Tipurile de date obiectuale
Unitate: Stringurile

Rezultatul la ieșire va fi acesta:

true
false

Prima variabilă textuală str1 a fost creată implicit și, prin urmare, a fost
stocată în Common pool, în timp ce a doua variabilă str2 este de fapt
un obiect stocat în heap. Variabilele str1 și str2 conțin doar adresele
valorilor propriu-zise. Acesta este motivul pentru care comparația
făcută cu operatorul de comparație nu dă rezultatele așteptate, fiindcă
operatorul compară de fapt două adrese. Utilizarea metodei equals dă
rezultatele așteptate, având în vedere că stringurile sunt comparate
caracter cu caracter. Pentru verificarea egalităţii string-urilor se poate
utiliza o metodă înrudită cu equals(), această metodă fiind
equalsIgnoreCase(). Această metodă va permite verificarea egalităţii
string-urilor case insensitive.

startsWith()

Această metodă are două variații, în funcție de parametrii de intrare:

public boolean startsWith(String prefix)

public boolean startsWith(String prefix, int toffset)

În esență, această metodă verifică dacă un anumit string începe cu


prefixul specificat. În primul caz, prefixul dorit este transmis sub forma
unei variabile de tip string. În cazul celei de-a doua metode, există un
parametru adițional care ne spune unde ar trebui să începem
verificarea prefixului. Acest parametru asigură ca verificarea să nu
înceapă de la început, ci de la indexul specificat de această variabilă.

© Copyright Link group 13 / 23


Curs: Core Java Programing
Module: Tipurile de date obiectuale
Unitate: Stringurile

Ambele metode returnează valoarea true sau false, în funcție dacă


prefixul transmis a fost găsit sau nu. Haideți să privim un exemplu
practic de utilizare a acestor metode:

public static void main(String[] args) {


String str = "Welcome to ITAcademy";

System.out.print("Return Value :");


System.out.println(str.startsWith("Welcome"));

System.out.print("Return Value :");


System.out.println(str.startsWith("ITAcademy"));

System.out.print("Return Value :");


System.out.println(str.startsWith("ITAcademy", 11));
}

After this, we get the following output:

Return Value :true


Return Value :false
Return Value :true

endsWith()

Această metodă se folosește pentru a verifica dacă un anumit string se


încheie în maniera specificată. Sintaxa acestei metode arată astfel:

public boolean endsWith(String suffix)

După cum putem vedea, funcția acceptă tipul string ca parametru de


intrare și afișează tipul boolean (true sau false) ca valoare de
returnare. Utilizarea sa arată astfel:

© Copyright Link group 14 / 23


Curs: Core Java Programing
Module: Tipurile de date obiectuale
Unitate: Stringurile

public static void main(String[] args) {


String str = "This is string!";
boolean retVal;

retVal = str.endsWith("string!");
System.out.println("Returned Value = " + retVal);

retVal = str.endsWith("This");
System.out.println("Returned Value = " + retVal);
}

Obținem următoarea ieșire:

Returned Value = true


Returned Value = false

replace()

Uneori va fi nevoie să înlocuim anumite caractere dintr-un string sau


șir cu alte caractere. Putem obține acest lucru cu ajutorul metodei
replace a clasei string. Semnătura metodei arată astfel:

public String replace(char oldChar, char newChar)

Putem vedea că metoda acceptă doi parametri și aceștia sunt


caracterele care trebuie înlocuite, primul cu cel de-al doilea.

String word = "--Hello--";


System.out.println(word.replace("-", "*"));

Codul de mai sus va produce următorul rezultat:

**Hello**

© Copyright Link group 15 / 23


Curs: Core Java Programing
Module: Tipurile de date obiectuale
Unitate: Stringurile

split()

Întregul conținut al unui string este tratat în mod egal, indiferent de


caracteristici. Numerele și literele sunt egale, literele și caracterele
sunt egale etc. Acesta este motivul pentru care o problemă des
întâlnită în lucrul cu stringurile este identificarea și izolarea unui
anumit element sau a unui șir de elemente. Prin utilizarea metodei
split(), putem împărți un string într-un șir de substringuri. Metoda
split() are următorul format:

public String[] split(String regex)


public String[] split(String regex, int limit)

Putem vedea că metoda split poate accepta unul sau doi parametri și
că are o funcție diferită în funcție de numărul de parametri. În primul
caz, metoda acceptă un parametru de tip string. Acest parametru
reprezintă stringul în funcție de care stringul sursă va fi împărțit. Al
doilea parametru pe care această metodă îl poate accepta se referă la
numărul maxim de elemente ale șirului final. Cu acest parametru, noi
am definit de fapt numărul maxim de cuvinte în care stringul sursă va
fi împărțit. Haideți să privim un exemplu practic de utilizare a metodei
split, astfel încât totul să devină mai clar:

public static void main(String[] args) {

String str = "Welcome-to-ITAcademy";

System.out.println("Return Value :");


String[] wordArray1 = str.split("-");
for (int i = 0; i < wordArray1.length; i++) {
System.out.println(wordArray1[i]);
}

System.out.println("Return Value :");


String[] wordArray2 = str.split("-", 2);
for (int i = 0; i < wordArray2.length; i++) {

© Copyright Link group 16 / 23


Curs: Core Java Programing
Module: Tipurile de date obiectuale
Unitate: Stringurile

System.out.println(wordArray2[i]);
}
}

Vom obține următorul rezultat:

Return Value :
Welcome
to
ITAcademy
Return Value :
Welcome
to-ITAcademy

În prima parte, am utilizat metoda split cu caracterul "-" transmis.


Împărțirea se va face pe baza acestui criteriu, astfel încât vom obține 3
cuvinte la ieșire (noul șir creat va avea trei elemente). Când am utilizat
metoda split pentru a doua oară, am expediat de asemenea și al doilea
parametru care se referă la numărul maxim de elemente ale șirului ce
pot să apară. Din acest motiv, șirul creat are două elemente (tot ce a
rămas de la prima împărțire a devenit un string, respectiv un element
al șirului). Încă nu am discutat despre șiruri și nu este posibil să
explicăm acest exemplu fără utilizarea șirurilor. Despre șiruri vom
discuta mai târziu în acest modul. De asemenea, în acest exemplu am
utilizat o buclă for pentru a trece prin toate elementele șirurilor create
și pentru a le afișa la ieșire.

Exemplul de mai sus se referă la utilizarea metodei split, când am


utilizat un singur caracter ca criteriu de împărțire. Haideți să vedem
cum putem face împărțirea în funcție de mai multe criterii:

public static void main(String[] args) {


String str = "This is a sentence. This is a question, right? Yes! It is.";

System.out.println("Return Value :");


String[] wordArray = str.split("[ .,?!]+");

© Copyright Link group 17 / 23


Curs: Core Java Programing
Module: Tipurile de date obiectuale
Unitate: Stringurile

for (int i = 0; i < wordArray.length; i++) {


System.out.println(wordArray[i]);
}
}

Vom obține următorul rezultat:

Return Value :
This
is
a
sentence
This
is
a
question
right
Yes
It
Is

Din exemplul de mai sus putem extrage concluzia că putem specifica


mai multe caractere ca parametru ce reprezintă criteriul de împărțire.
Toate caracterele în funcție de care dorim să facem împărțirea sunt
plasate între paranteze pătrate, la fel ca în codul de mai sus. Probabil
vă întrebați de ce avem caracterul + în afara parantezelor pătrate. Se
poate întâmpla ca stringul susrsă să aibă două caractere de împărțire
identice, unul după celălalt. La fel ca în exemplul nostru: avem un
spațiu dublu în două locuri. Semnul plus ne permite să tratăm astfel de
caractere de împărțire continue ca și cum ar fi un singur caracter.
Încercați să scoateți caracterul + din expresia de mai sus, porniți
aplicația și verificați ce obțineți la ieșire.

Notă:

Contrucția [ .,?!]+ este așa-numita ieșire regulată. Vom discuta mai

© Copyright Link group 18 / 23


Curs: Core Java Programing
Module: Tipurile de date obiectuale
Unitate: Stringurile

multe despre expresiile regulate în cursul Advanced Java Programming.

Exerciții

Exercițiul 1

În aplicație intră o secvență de stringuri. Dimensiunea permisă a


acestor stringuri la ieșire este de 25 de caractere, însă unele dintre ele
sunt mai mari de atât la ieșire. Creați un program care, atunci când un
string depășește dimensiunea de 25 de caractere, va întrerupe stringul
și va introduce trei puncte în locul ultimelor trei caractere. Stringurile
astfel procesate trebuie afișate la ieșire.

Intrarea programului:

String[] texts =
{ "Optimum pH of your water is between 6.0 and 7.0. However Oscars are okay in a pH up t
o 8.0.",
"The Oscar fish is not a difficult fish to look after if you give it a suitable environment to liv
e in. You may start having problems such as health issues if you keep your Oscar in an unsuita
bly small tank or feed it on a poor diet",
"The Oscar has the potential to reach 18 inches. However in captivity Oscars normally grow
to between 8 and 12 inches" };

Soluție:

String[] texts =
{ "Optimum pH of your water is between 6.0 and 7.0. However Oscars are okay in a pH up t
o 8.0.",
"The Oscar fish is not a difficult fish to look after if you give it a suitable environment to liv
e in. You may start having problems such as health issues if you keep your Oscar in an unsuita
bly small tank or feed it on a poor diet",
"The Oscar has the potential to reach 18 inches. However in captivity Oscars normally grow
to between 8 and 12 inches" };
for(int i=0;i<texts.length;i++)

© Copyright Link group 19 / 23


Curs: Core Java Programing
Module: Tipurile de date obiectuale
Unitate: Stringurile

{
if(texts[i].length()>25)
{
String tmpTxt = texts[i].substring(0,22);
tmpTxt = tmpTxt.concat("...");
System.out.println(tmpTxt);
}
}
}

Exercițiul 2

În aplicație intră o listă de fișiere sub forma unui string. Trebuie


recunoscute doar fișierele de tip jpg, png sau gif (prin utilizarea
extensiilor acestora) și afișat un mesaj despre tipul lor la ieșire:

Fișierul: picture1.jpg este de tip jpg


Fișierul: picture2.png este de tip png
Fișierul: picture3.gif este de tip gif

Parametrul de intrare:

String[] files = { "picture1.jpg", "text1.txt",


"picture2.png", "text2.doc", "picture3.gif" };

Soluție:

String[] files =
{ "picture1.jpg",
"text1.txt",
"picture2.png",
"text2.doc",
"picture3.gif" };
for(int i=0;i<files.length;i++)
{
if(files[i].endsWith(".jpg"))

© Copyright Link group 20 / 23


Curs: Core Java Programing
Module: Tipurile de date obiectuale
Unitate: Stringurile

System.out.println("Fajl: " + files[i] + " is of jpg type" );


if(files[i].endsWith(".gif"))
System.out.println("Fajl: " + files[i] + " is of gif type" );
if(files[i].endsWith(".png"))
System.out.println("Fajl: " + files[i] + " is of png type" );
}

Sau:

String[] files =
{ "picture1.jpg",
"text1.txt",
"picture2.png",
"text2.doc",
"picture3.gif" };

String[] permitedExtensions = {"jpg","gif","png" };


for(int i=0;i<files.length;i++)
{

String fileExt = files[i].split("\\.")[1];

for(int u = 0;u<permitedExtensions.length;u++)
{
if(permitedExtensions[u].equals(fileExt))
System.out.println("Fajl: " + files[i] + " je tipa " + fileExt );
}

Exercițiul 3

Datele intră în aplicație prin intermediul următorului string:

© Copyright Link group 21 / 23


Curs: Core Java Programing
Module: Tipurile de date obiectuale
Unitate: Stringurile

String users = "firstName: Vladimir|lastName:


Vladimirovic|firstName: Jovan|lastName:
Jovanovicc|firstName: Petar|lastName: Petrovic";

Formatați datele astfel încât să obțineți următoarea ieșire:

user first name is : Vladimir, user last name is :


Vladimirovic

Soluție:

String users = "firstName: Vladimir|lastName: Vladimirovic|firstName: Jovan|lastName: Jov


anovic|firstName: Petar|lastName: Petrovic";
String[] usersArray = users.split("\\|");
for(int i=0;i<usersArray.length;i+=2)
{
String firstName = usersArray[i].split(" ")[1];
String lastName = usersArray[i+1].split(" ")[1];
System.out.println("user first name is : " + firstName + ", user last name is : " + lastName);
}

Exercițiul 4

Datele intră în aplicație prin intermediul următoarelor două stringuri:

String[] forbidenChars = { "<",">","'" };


String input = "<div>my 'div' tag</div>";

Trebuie să curățați stringul astfel încât la ieșire să nu apară


caracterele: divmy div tag/div

Soluție:

© Copyright Link group 22 / 23


Curs: Core Java Programing
Module: Tipurile de date obiectuale
Unitate: Stringurile

String[] forbidenChars = { "<",">","'" };


String input = "<div>my 'div' tag</div>";
String output=input;
for(int i=0;i<forbidenChars.length;i++)
{
output = output.replace(forbidenChars[i], "");
}
System.out.println(output);

© Copyright Link group 23 / 23

Powered by TCPDF (www.tcpdf.org)

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

  • Java Basics
    Java Basics
    Document123 pagini
    Java Basics
    Alexandru Ionescu
    Încă nu există evaluări
  • Materie Micro Anul 1-Sem. 1
    Materie Micro Anul 1-Sem. 1
    Document85 pagini
    Materie Micro Anul 1-Sem. 1
    craciun roxana livia
    Încă nu există evaluări
  • Fire de Executie in Python
    Fire de Executie in Python
    Document13 pagini
    Fire de Executie in Python
    Marius Ionescu
    Încă nu există evaluări
  • Java Lab 1,2
    Java Lab 1,2
    Document37 pagini
    Java Lab 1,2
    Marica Marian
    Încă nu există evaluări
  • MARFURI
    MARFURI
    Document311 pagini
    MARFURI
    Ana-Maria SIMION
    Încă nu există evaluări
  • JAVA Capitolul I
    JAVA Capitolul I
    Document141 pagini
    JAVA Capitolul I
    Alexandru Filip
    Încă nu există evaluări
  • Algoritmi Java PDF
    Algoritmi Java PDF
    Document237 pagini
    Algoritmi Java PDF
    Gicu Busuioc
    Încă nu există evaluări
  • Analiza Si Proiectarea Algoritmilor
    Analiza Si Proiectarea Algoritmilor
    Document237 pagini
    Analiza Si Proiectarea Algoritmilor
    CrăciunOvidiu
    Încă nu există evaluări
  • ! Help Java
    ! Help Java
    Document50 pagini
    ! Help Java
    Mircea Tirziu
    Încă nu există evaluări
  • Paw Id
    Paw Id
    Document47 pagini
    Paw Id
    ramonet
    Încă nu există evaluări
  • Turism
    Turism
    Document8 pagini
    Turism
    craciun roxana livia
    Încă nu există evaluări
  • L3 Java
    L3 Java
    Document6 pagini
    L3 Java
    Alexandru Grigoriță
    Încă nu există evaluări
  • Stringuri
    Stringuri
    Document18 pagini
    Stringuri
    Русские Трейлеры
    Încă nu există evaluări
  • Tablouri String
    Tablouri String
    Document8 pagini
    Tablouri String
    CrăciunOvidiu
    Încă nu există evaluări
  • Lab6 POO Calc
    Lab6 POO Calc
    Document12 pagini
    Lab6 POO Calc
    bulllett
    Încă nu există evaluări
  • Mostenirea in Java
    Mostenirea in Java
    Document9 pagini
    Mostenirea in Java
    euhen_stana
    100% (1)
  • Java Ocp
    Java Ocp
    Document11 pagini
    Java Ocp
    Robert Valeriu
    Încă nu există evaluări
  • Subiecte de Studiu Java
    Subiecte de Studiu Java
    Document9 pagini
    Subiecte de Studiu Java
    Tony Dicut
    Încă nu există evaluări
  • Indrumar TAP
    Indrumar TAP
    Document120 pagini
    Indrumar TAP
    Ion Popescu
    Încă nu există evaluări
  • Curs04 Java
    Curs04 Java
    Document44 pagini
    Curs04 Java
    dani10gh
    Încă nu există evaluări
  • Indrumar Tehnici Avansate
    Indrumar Tehnici Avansate
    Document107 pagini
    Indrumar Tehnici Avansate
    zero n
    Încă nu există evaluări
  • LabJava 03
    LabJava 03
    Document6 pagini
    LabJava 03
    CrăciunOvidiu
    Încă nu există evaluări
  • Lucrarea de Laborator NR 1
    Lucrarea de Laborator NR 1
    Document10 pagini
    Lucrarea de Laborator NR 1
    Grosu Maxim
    Încă nu există evaluări
  • Poo Cursuri
    Poo Cursuri
    Document63 pagini
    Poo Cursuri
    Ștefania Mircea
    Încă nu există evaluări
  • Lucrarea de Laborator TAP NR 1
    Lucrarea de Laborator TAP NR 1
    Document10 pagini
    Lucrarea de Laborator TAP NR 1
    Calc 182
    Încă nu există evaluări
  • L3 Java1
    L3 Java1
    Document8 pagini
    L3 Java1
    Alexandru Grigoriță
    Încă nu există evaluări
  • Programare WEB - Curs 3
    Programare WEB - Curs 3
    Document22 pagini
    Programare WEB - Curs 3
    Epic fails
    Încă nu există evaluări
  • Prog. C++. Lab Nr. 1
    Prog. C++. Lab Nr. 1
    Document30 pagini
    Prog. C++. Lab Nr. 1
    Unknown Person
    Încă nu există evaluări
  • 4 Serializare
    4 Serializare
    Document8 pagini
    4 Serializare
    Данилов Алина
    Încă nu există evaluări
  • Lectia 4-2011 Java
    Lectia 4-2011 Java
    Document9 pagini
    Lectia 4-2011 Java
    Claudia Stefania
    Încă nu există evaluări
  • Programare Orientata Pe Obiecte - Adrian Runceanu
    Programare Orientata Pe Obiecte - Adrian Runceanu
    Document74 pagini
    Programare Orientata Pe Obiecte - Adrian Runceanu
    Andra Dumitru
    Încă nu există evaluări
  • 4 - Tipul String
    4 - Tipul String
    Document5 pagini
    4 - Tipul String
    Caesar8
    Încă nu există evaluări
  • Java 3
    Java 3
    Document43 pagini
    Java 3
    Alexandra Rosca
    Încă nu există evaluări
  • Fire de Executie
    Fire de Executie
    Document12 pagini
    Fire de Executie
    Madalina Gherman
    Încă nu există evaluări
  • Probleme Java
    Probleme Java
    Document15 pagini
    Probleme Java
    costpop
    Încă nu există evaluări
  • Raport 3
    Raport 3
    Document9 pagini
    Raport 3
    Dan Zagoreanu
    Încă nu există evaluări
  • Colecțiile
    Colecțiile
    Document16 pagini
    Colecțiile
    craciun roxana livia
    Încă nu există evaluări
  • Constructori, Referinte - POO
    Constructori, Referinte - POO
    Document7 pagini
    Constructori, Referinte - POO
    Claudia Ardelean
    Încă nu există evaluări
  • Lectia4 PDF
    Lectia4 PDF
    Document17 pagini
    Lectia4 PDF
    Calin Luchian
    Încă nu există evaluări
  • Examen La POO
    Examen La POO
    Document30 pagini
    Examen La POO
    HatyManagarm
    Încă nu există evaluări
  • Java - Subiecte Si Rezumate
    Java - Subiecte Si Rezumate
    Document44 pagini
    Java - Subiecte Si Rezumate
    Андрей Пырлог
    Încă nu există evaluări
  • Tablouri Și Șiruri de Caractere
    Tablouri Și Șiruri de Caractere
    Document5 pagini
    Tablouri Și Șiruri de Caractere
    Marcica Dranga
    Încă nu există evaluări
  • Colectii
    Colectii
    Document15 pagini
    Colectii
    adipistea
    Încă nu există evaluări
  • Constructori
    Constructori
    Document4 pagini
    Constructori
    Ciobanu Stanislav
    Încă nu există evaluări
  • Proiect PCLP
    Proiect PCLP
    Document16 pagini
    Proiect PCLP
    Nistor Gabriel
    Încă nu există evaluări
  • Stiva - Operatii Specifice
    Stiva - Operatii Specifice
    Document5 pagini
    Stiva - Operatii Specifice
    Cosnita Emilia-Felicia
    Încă nu există evaluări
  • Lab 7 Rom
    Lab 7 Rom
    Document5 pagini
    Lab 7 Rom
    Влад Морозан
    Încă nu există evaluări
  • Lab 7 Rom
    Lab 7 Rom
    Document5 pagini
    Lab 7 Rom
    Vlada Sofia
    Încă nu există evaluări
  • BPC Stringuri
    BPC Stringuri
    Document46 pagini
    BPC Stringuri
    Vitalie Ambrosi
    Încă nu există evaluări
  • Medi I Instrument e Program Are An I I Semi
    Medi I Instrument e Program Are An I I Semi
    Document157 pagini
    Medi I Instrument e Program Are An I I Semi
    Ionut Sos
    Încă nu există evaluări
  • Laborator 3
    Laborator 3
    Document8 pagini
    Laborator 3
    Corynna Mbs
    Încă nu există evaluări
  • Functionalitati Proiect
    Functionalitati Proiect
    Document1 pagină
    Functionalitati Proiect
    craciun roxana livia
    Încă nu există evaluări
  • MSQL9 03
    MSQL9 03
    Document9 pagini
    MSQL9 03
    craciun roxana livia
    Încă nu există evaluări
  • Gestionarea Datei Și A Timpului
    Gestionarea Datei Și A Timpului
    Document11 pagini
    Gestionarea Datei Și A Timpului
    craciun roxana livia
    Încă nu există evaluări
  • MSQL9 02
    MSQL9 02
    Document26 pagini
    MSQL9 02
    craciun roxana livia
    Încă nu există evaluări
  • MSQL9 01
    MSQL9 01
    Document9 pagini
    MSQL9 01
    craciun roxana livia
    Încă nu există evaluări
  • Date Colecatte
    Date Colecatte
    Document1.087 pagini
    Date Colecatte
    craciun roxana livia
    Încă nu există evaluări
  • Excursie Grecia
    Excursie Grecia
    Document9 pagini
    Excursie Grecia
    craciun roxana livia
    Încă nu există evaluări
  • JCPR 15
    JCPR 15
    Document15 pagini
    JCPR 15
    craciun roxana livia
    Încă nu există evaluări
  • Tema
    Tema
    Document2 pagini
    Tema
    craciun roxana livia
    Încă nu există evaluări
  • Colecțiile
    Colecțiile
    Document16 pagini
    Colecțiile
    craciun roxana livia
    Încă nu există evaluări
  • Analiza Date Pentru Regresie
    Analiza Date Pentru Regresie
    Document78 pagini
    Analiza Date Pentru Regresie
    craciun roxana livia
    Încă nu există evaluări
  • JCPR 16
    JCPR 16
    Document28 pagini
    JCPR 16
    craciun roxana livia
    Încă nu există evaluări
  • C1 FABBV ID Micro Oct 2020
    C1 FABBV ID Micro Oct 2020
    Document35 pagini
    C1 FABBV ID Micro Oct 2020
    craciun roxana livia
    Încă nu există evaluări
  • C2 Consumatorul Fabbv 2020
    C2 Consumatorul Fabbv 2020
    Document48 pagini
    C2 Consumatorul Fabbv 2020
    craciun roxana livia
    Încă nu există evaluări
  • 11
    11
    Document1 pagină
    11
    craciun roxana livia
    Încă nu există evaluări
  • 6
    6
    Document1 pagină
    6
    craciun roxana livia
    Încă nu există evaluări
  • 5
    5
    Document1 pagină
    5
    craciun roxana livia
    Încă nu există evaluări
  • Template Proiect Design 2021-2022 - MK
    Template Proiect Design 2021-2022 - MK
    Document21 pagini
    Template Proiect Design 2021-2022 - MK
    craciun roxana livia
    Încă nu există evaluări
  • 10
    10
    Document1 pagină
    10
    craciun roxana livia
    Încă nu există evaluări
  • 7
    7
    Document1 pagină
    7
    craciun roxana livia
    Încă nu există evaluări
  • 4
    4
    Document1 pagină
    4
    craciun roxana livia
    Încă nu există evaluări
  • Colocviu A 29 05 2019
    Colocviu A 29 05 2019
    Document4 pagini
    Colocviu A 29 05 2019
    craciun roxana livia
    Încă nu există evaluări
  • 1
    1
    Document1 pagină
    1
    craciun roxana livia
    Încă nu există evaluări
  • 12
    12
    Document1 pagină
    12
    craciun roxana livia
    Încă nu există evaluări
  • 8
    8
    Document1 pagină
    8
    craciun roxana livia
    Încă nu există evaluări
  • Subiecte Examen 2020
    Subiecte Examen 2020
    Document212 pagini
    Subiecte Examen 2020
    craciun roxana livia
    100% (1)