Differences

This shows you the differences between two versions of the page.

Link to this comparison view

poo:breviare:breviar-02 [2018/09/21 00:38]
mihai.nan
poo:breviare:breviar-02 [2018/10/01 13:21] (current)
carmen.odubasteanu [Operații cu șiruri de caractere]
Line 3: Line 3:
  
  
-==== Operatii ​cu siruri ​de caractere ====+ 
 +===== Breviar 2 - Utilizare clase Java ===== 
 +  
 +==== Operații ​cu șiruri ​de caractere ​- String, StringBuffer ​====
  
 === Introducere === === Introducere ===
  
-În limbajele de programare, majoritatea tipurilor de date utilizate pentru variabile sunt **valorile booleene**, **sirurile ​de caractere** (sau vectori de caractere terminati cu ''​\0''​) ​si **valorile numerice**. În contrast cu limbajele **C** sau **C++**, în Java modul de gestiune a șirurilor de caractere este unul diferit, deoarece:+În limbajele de programare, majoritatea tipurilor de date utilizate pentru variabile sunt **valorile booleene**, **șirurile ​de caractere** (sau vectori de caractere terminati cu ''​\0''​) ​și **valorile numerice**. În contrast cu limbajele **C** sau **C++**, în Java modul de gestiune a șirurilor de caractere este unul diferit, deoarece:
  
   * fiecare ''​char''​ reprezintă o valoare **Unicode** pe ''​16 biți''​ și nu ''​1 octet''​ (ca în **C** / **C++**);   * fiecare ''​char''​ reprezintă o valoare **Unicode** pe ''​16 biți''​ și nu ''​1 octet''​ (ca în **C** / **C++**);
Line 34: Line 37:
 **Literalele șir** constau dintr-o serie de caractere încadrate între ghilimele duble: <code java>​String autor="​Liviu Rebreanu";</​code>​ **Literalele șir** constau dintr-o serie de caractere încadrate între ghilimele duble: <code java>​String autor="​Liviu Rebreanu";</​code>​
  
-Atunci când se folosește un **literal șir** în Java, se stocheaza valoarea sa ca obiect ''​String''​. Nu trebuie să instanțiem explicit un nou obiect - ca în cazul celorlalte obiecte cu care vom lucra - deci este la fel de ușor de lucrat cu acest tip ca în cazul tipurilor primitive. Șirurile sunt diferite în ceea ce privește acest aspect - nici unul dintre tipurile primitive nu sunt pastrate ca obiecte atunci ​cand sunt folosite.+Atunci când se folosește un **literal șir** în Java, se stocheaza valoarea sa ca obiect ''​String''​. Nu trebuie să instanțiem explicit un nou obiect - ca în cazul celorlalte obiecte cu care vom lucra - deci este la fel de ușor de lucrat cu acest tip ca în cazul tipurilor primitive. 
 + 
 +Șirurile sunt diferite în ceea ce privește acest aspect - nici unul dintre tipurile primitive nu sunt pastrate ca obiecte atunci ​când sunt folosite.
 </​note>​ </​note>​
  
Line 45: Line 50:
     public static void main(String args[]) {     public static void main(String args[]) {
         String str = "​Laborator POO";         String str = "​Laborator POO";
-        String str1 = " ​2016-2017";+        String str1 = " ​2018-2019";
         String str2 = "​POO";​         String str2 = "​POO";​
         String str3;         String str3;
Line 63: Line 68:
 </​code>​ </​code>​
  
 +
 +== Compararea a două șiruri de caractere ==
 +<note warning>​Pentru a compara două șiruri de caractere, reprezentate prin obiecte de tip **String**, putem folosi metoda ''​equals''​.
 +
 +Dacă vom folosi operatorul ''​=='',​ atunci vom compara referințele.
 +
 +Pentru a înțelege mai bine cum stau lucrurile, puteți analiza exemplul următor.
 +</​note>​
 +
 +<code java>
 +// Declarațiile
 +String s1 = "​Hello"; ​             // String literal
 +String s2 = "​Hello"; ​             // String literal
 +String s3 = s1;                   // same reference
 +String s4 = new String("​Hello"​); ​ // String object
 +String s5 = new String("​Hello"​); ​ // String object
 +
 +// Compararea string-urilor
 +s1 == s1;         // true, same pointer
 +s1 == s2;         // true, s1 and s1 share storage in common pool
 +s1 == s3;         // true, s3 is assigned same pointer as s1
 +s1.equals(s3); ​   // true, same contents
 +s1 == s4;         // false, different pointers
 +s1.equals(s4); ​   // true, same contents
 +s4 == s5;         // false, different pointers in heap
 +s4.equals(s5); ​   // true, same contents
 +</​code>​
  
 <note important>​În Java, operatorul de concatenare ''​+''​ este extrem de flexibil, în sensul că permite concatenarea sirurilor cu obiecte de orice tip care au o reprezentare de tip sir de caractere. <note important>​În Java, operatorul de concatenare ''​+''​ este extrem de flexibil, în sensul că permite concatenarea sirurilor cu obiecte de orice tip care au o reprezentare de tip sir de caractere.
Line 108: Line 140:
         //se adauga str la sbuf         //se adauga str la sbuf
         str1.append(str);​         str1.append(str);​
-        System.out.println("​str1 = " + str1.toString());+        System.out.println("​str1 = " + str1);
         //se adauga reprezentarea ca sir de caractere a nr 2         //se adauga reprezentarea ca sir de caractere a nr 2
         str1.append(1);​         str1.append(1);​
Line 125: Line 157:
 </​code>​ </​code>​
  
-=== Clasa Vector ===+==== Clasa Vector ​====
 Un vector este o structura de date dinamica in Java. Se pot adauga elemente in orice pozitie, se pot sterge elemente, se pot inlocui elemente, se poate determina pozitia pe care se afla un element, se poate determina numarul de elemente dintr-un vector. In Java, un obiect de tip **Vector** lucreaza cu elemente de tip **Object**, aceasta insemnand ca permite stocarea oricaror tipuri de elemente. Un vector este o structura de date dinamica in Java. Se pot adauga elemente in orice pozitie, se pot sterge elemente, se pot inlocui elemente, se poate determina pozitia pe care se afla un element, se poate determina numarul de elemente dintr-un vector. In Java, un obiect de tip **Vector** lucreaza cu elemente de tip **Object**, aceasta insemnand ca permite stocarea oricaror tipuri de elemente.
 Pentru o intelegere mai buna a importantei utilizarii acestei clase, este recomandata parcurgerea exemplului de mai jos. Pentru o intelegere mai buna a importantei utilizarii acestei clase, este recomandata parcurgerea exemplului de mai jos.
Line 132: Line 164:
 public class Exemplu { public class Exemplu {
     public static void main(String args[]) {     public static void main(String args[]) {
 +       
         //​Instantierea obiectului         //​Instantierea obiectului
         Vector vect = new Vector();         Vector vect = new Vector();
 +       
         //Adaugarea in vector a unor numere intregi         //Adaugarea in vector a unor numere intregi
         vect.add(20);​         vect.add(20);​
         vect.add(5);​         vect.add(5);​
         vect.add(7);​         vect.add(7);​
 +       
         //​Determinarea pozitie lui 5         //​Determinarea pozitie lui 5
         System.out.println(vect.indexOf(5));​         System.out.println(vect.indexOf(5));​
 +       
         //​Determinarea primului element         //​Determinarea primului element
         System.out.println(vect.firstElement());​         System.out.println(vect.firstElement());​
 +       
         //​Modificarea elementului de pe pozitia 2         //​Modificarea elementului de pe pozitia 2
         vect.set(2, 10);         vect.set(2, 10);
-        //Afisarea vectorului +       
-        System.out.println(vect);​ +
-        for(int i = 0; i < vect.size();​ i++) { +
-            System.out.println(vect.get(i));​ +
-        }+
         //​Determinarea primului element         //​Determinarea primului element
         int first = (int) vect.get(0);​         int first = (int) vect.get(0);​
 +       
         //Afisarea vectorului - recomandat         //Afisarea vectorului - recomandat
         System.out.println(vect);​         System.out.println(vect);​
-        //Afisarea vectorului - nerecomandat+        //Afisarea vectorului - **NERECOMANDAT** !!
         for(int i = 0 ; i < vect.size();​ i++) {         for(int i = 0 ; i < vect.size();​ i++) {
             System.out.println(vect.get(i));​             System.out.println(vect.get(i));​
Line 171: Line 205:
   - De ce este considerată clasa **StringBuffer** mutabilă?   - De ce este considerată clasa **StringBuffer** mutabilă?
   - Care este diferenta esentială între **StringBuffer** si **StringBuilder**?​   - Care este diferenta esentială între **StringBuffer** si **StringBuilder**?​
-  - Se pot compara două obiecte de tip **String**? ​Argumentati!+  - Se pot compara două obiecte de tip **String**? ​Argumentați!
   - De ce un vector de caractere este mai potrivit decât un obiect de tip **String** pentru retinerea unei parole?   - De ce un vector de caractere este mai potrivit decât un obiect de tip **String** pentru retinerea unei parole?
-  - Ce se întâmplă atunci când folosim operatorul == pentru a compara obiecte de tip **String**?+  - Ce se întâmplă atunci când folosim operatorul ​''​=='' ​pentru a compara obiecte de tip **String**?
   - Există vreo modalitate prin care un obiect se poate converti în obiect de tip **String**?   - Există vreo modalitate prin care un obiect se poate converti în obiect de tip **String**?
  
poo/breviare/breviar-02.1537479532.txt.gz · Last modified: 2018/09/21 00:38 by mihai.nan
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0