Clasele String și StringBuffer

Pentru șirurile de caractere, pe care le vom numi în viitor simplu "șiruri", există în pachetul java.lang doua clase: String și StringBuffer. Obiectele clasei String conțin șirurile propriu-zise, iar cele ale clasei StringBuffer conțin zone tampon pentru șiruri.

Clasa String

Toate șirurile în limbajul Java, inclusiv literalii-șir, de exemplu "ABCdef123", sunt obiecte ale clasei  String.  Obiectele din această clasă sunt constante, adică șirurile conținute în ele nu pot fi modificate. Dacă este necesar să se folosească șiruri modificabile, se recurge la clasa StringBuffer.
În afară de metodele pe care le oferă, clasa  String conține și suportul necesar pentru operatorul de concatenare'+'. Prin concatenarea a două șiruri se obține un nou șir, rezultat din punerea celor două unul în continuarea celuilalt. De exemplu, expresia
"ABC"+"defg" are ca valoare șirul "ABCdefg".

Dăm aici o parte din constructorii și metodele mai frecvent utilizate ale clasei String. O prezentare mai amplă există în indexul de clase. Vă recomandăm să o consultați, pentru a cunoaște ce constructori și metode conține. Amintim că prezentarea completă se găsește în documentația Java API de pe Internet.

Construirea unui obiect din clasa șir se face cel mai frecvent cu constructorul String(String s). Acest constructor creeaza în memorie o copie a șirului s primit ca argument.

Dintre metodele foarte utile menționăm aici următoarele:

int compareTo(String anotherString)
          Compara acest șir cu șirul anotherString primit ca argument. Dacă cele două șiruri sunt identice, întoarce 0 (zero). Dacă acest șir îl precede pe anotherString întoarce o valoare negativă, iar daca îi succede lui anotherString întoarce o valoare pozitivă. Compararea șirurilor se face în ordine lexicografică (în ordinea în care ar fi plasate într-un dicționar).

int compareToIgnoreCase(String str)
          Compară lexicografic acest șir cu sirul str primit ca argument, ignorând deosebirea dintre literele majuscule și cele minuscule.

int length()
          Întoarce lungimea acestui șir (numărul de caractere conținute).

String trim()
          Întoarce un nou șir, obținut din acest șir prin eliminarea spațiilor de la început și de la sfârșit.
 
int indexOf(int ch) 
          Întoarce indicele la care se găsește în șir prima apariție a caracterului ch. Dacă acest caracter nu există în șir, întoarce -1.

 int indexOf(int ch, int fromIndex)
          Similar cu metoda precedentă, dar căutarea in sir începe de la poziția fromIndex.

 int indexOf(String str)
          Întoarce indicele poziției de la care în acest șir apare prima dată subșirul str.

 int indexOf(String str, int fromIndex)
          Similar cu metoda precedentă, dar căutarea în acest șir începe de la poziția fromIndex.

int lastIndexOf(int ch) 
          Întoarce indicele ultimei poziții pe care apare caracterul ch în acest șir. 

 int lastIndexOf(int ch, int fromIndex) 
          Întoarce indicele ultimei poziții pe care se găsește caracterul ch, dacă se face căutarea înapoi, începând de la poziția fromIndex.

int lastIndexOf(String str) 
          Întoarce indicele ultimei apariții în acest șir a subșirului str.

 int lastIndexOf(String str, int fromIndex)
          Similar cu metoda precedentă, dar căutarea înapoi se face de la poziția fromIndex.

String substring(int beginIndex) 
          Întoarce un nou șir, care conține caracterele acestui șir, începând de la poziția beginIndex, până la sfârșit.

String substring(int beginIndex, int endIndex)
          Întoarce subșirul situat între pozitiile beginIndex și endIndex-1 inclusiv.

Exemplu
În programul din fișierul TestStr.java se exemplifică utilizarea clasei String.
 

Clasa StringBuffer

Obiectele  clasei  StringBuffer implementează șiruri care pot fi modificate atât ca lungime, cât și sub aspectul caracterelor pe care le conțin. În engleză buffer înseamnă zonă tampon. Așa dar, un "StringBuffer" este modelul unei zone tampon de memorie, în care se pot adăuga noi caractere la șirul existent și în care se pot înlocui total sau parțial caracterele existente cu altele.

Principalele operații asupra unei astfel de "zone tampon" sunt metodele append() și insert(), prin care se poate adăuga un șir nou în coada celui existent, sau se înserează acest șir nou în interiorul celui existent.

Un obiect StringBuffer (zona tampon pentru caractere) se caracterizează prin lungime și capacitate. Lungimea este numărul de caractere conținut efectiv, iar capacitatea este dimensiunea la un moment dat a tabloului de caractere conținut în obiectul respectiv. Ambele se pot modifica în timp, ca urmare a aplicării unor metode.

Construirea unui nou StringBuffer se poate face cu unul din constructorii StringBuffer(), StringBuffer(int length) sau StringBuffer(String str). Primul dintre ei construiește o zonă tampon de caractere, având o capacitate inițială predefinită; al doilea una de capacitate inițială length, iar al treilea construiește o zonă tampon care conține inițial șirul str.

Cele mai importante metode sunt:
    public int length() -  întoarce lungimea curentă a șirului (numărul de caractere existente efectiv în buffer);
    public int capacity() -  întoarce capacitatea curentă a buffer-ului;
    public StringBuffer append(char c) -  adaugă la buffer caracterul c;
    public StringBuffer insert(int offset, char c) - însereaza în buffer caracterul c pe pozitia offset;
    public String toString() - întoarce un șir care are același conținut cu cel din acest StringBuffer.
 
Există, de fapt, o familie de metode append(), care diferă între 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 adaugă în coada zonei tampon argumentul lor, convertit într-un șir.

Există, de asemenea, o familie de metode insert(), care diferă 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 înserează în zona tampon, pe poziția offset, cel de al doilea argument convertit în șir.

O prezentare mai amplă a clasei StringBuffer este dată în indexul de clase, iar descrierea completă se găsește pe Internet în documentația Java API.

Exemplu
În fișierul TestStrB.java este dat un exmplu de program în care se testează clasa StringBuffer.



© Copyright 2000 - Severin BUMBARU, Universitatea "Dunărea de Jos" din Galați