Un fragment de prelegere cu un mentor ca parte a cursului Universității Codegym. Înscrie-te la cursul complet.
"Bună, Amigo! Astăzi vom analiza câteva scenarii obișnuite care implică lucrul cu șiruri. De exemplu, știi cum să împărțiți un șir în mai multe părți?"
— Nu o să-ți spun imediat, Ellie. Dar tu o să-mi spui, nu?
split()
metodă
„Există mai multe moduri de a face acest lucru. Prima modalitate de a împărți un șir în mai multe părți este să folosiți metoda split()
. O expresie regulată care definește un șir special de delimitare trebuie să fie transmisă ca parametru. Veți afla în ce este o expresie regulată. misiunea Java Collections .
Exemplu:
Cod | Rezultat |
---|---|
|
Rezultatul va fi o matrice de trei șiruri de caractere:
|
Simplu, dar uneori această abordare este excesivă. Dacă există o mulțime de delimitatori (de exemplu, spații, caractere newline, tab-uri, puncte), atunci trebuie să construiți o expresie regulată destul de complexă."
„Ei bine, sigur. Și dacă este greu de citit, atunci este greu de făcut modificări.
StringTokenizer
clasă
Un fragment de prelegere cu un mentor ca parte a cursului Universității Codegym. Înscrie-te la cursul complet.
„Java are o clasă specială a cărei sarcină este să împartă un șir în subșiruri.
„Această clasă nu folosește expresii regulate: în schimb, pur și simplu treceți un șir format din delimitatori. Avantajul acestei abordări este că nu rupe întregul șir în bucăți dintr-o dată, ci se mișcă de la început la sfârșit. pas pe rând.
Clasa are un constructor și două metode. Transmitem constructorului un șir pe care îl împărțim în părți și un șir format dintr-un set de caractere delimitare.
Metode | Descriere |
---|---|
|
Returnează următorul subșir |
|
Verifică dacă există mai multe subșiruri. |
„Această clasă îmi amintește cumva de clasa Scanner, care are nextLine()
și hashNextLine()
metode.
„Aceasta este observația bună pe care ați făcut-o. Puteți crea un StringTokenizer
obiect cu această comandă:
StringTokenizer name = new StringTokenizer(string, delimiters);
Unde șir este șirul care trebuie împărțit în părți. Și delimitatorii este un șir, iar fiecare caracter din el este tratat ca un delimitator. Exemplu:
Cod | Ieșire de consolă |
---|---|
|
|
„Rețineți că fiecare caracter din șirul trecut în al doilea șir către StringTokenizer
constructor este considerat un separator.
String.format()
metoda si StringFormatter
clasa
„O altă metodă interesantă a clasei String este format()
.
„Să presupunem că aveți diverse variabile care stochează date. Cum le afișați pe ecran într-o singură linie? De exemplu, avem câteva date (coloana din stânga) și rezultatul dorit (coloana din dreapta):
Cod | Ieșire de consolă |
---|---|
|
|
Codul pentru un astfel de program va arăta cam așa:
Cod program |
---|
|
„Veți fi de acord cu mine că codul nu este foarte lizibil. Și dacă numele variabilelor ar fi mai lungi, atunci codul ar deveni și mai dificil:
Cod program |
---|
|
„Da, e o lectură grea!”
„Nu vă faceți griji. Aceasta este o situație comună în programele din lumea reală, așa că vreau să vă spun despre o modalitate de a scrie acest cod mai simplu și mai concis.
String.format
„ String
Clasa are o metodă statică format()
: vă permite să specificați un model pentru asamblarea unui șir cu date. Aspectul general al comenzii este următorul:
String name = String.format(pattern, parameters);
Exemplu:
Cod | Rezultat |
---|---|
|
|
|
|
|
|
„ format()
Primul parametru al metodei este un șir de format care conține tot textul dorit împreună cu caractere speciale numite specificatori de format (cum ar fi %d
și %s
) în locurile în care trebuie să inserați date.
„ format()
Metoda înlocuiește aceștia %s
și %d
specificatorii de format cu parametrii care urmează șirul de format din lista de parametri. Dacă vrem să inserăm un șir, atunci scriem . Dacă %s
vrem să inserăm un număr, atunci specificatorul de format este %d
. Exemplu:
Cod | Rezultat |
---|---|
|
s este egal cu"a=1, b=4, c=3" |
„Iată o listă scurtă de specificatori de format care pot fi utilizați în șirul de format:
Specificator | Sens |
---|---|
|
String |
|
interger: byte , short , int ,long |
|
număr real: float ,double |
|
boolean |
|
char |
|
Date |
|
% caracter |
„Acești specificatori indică tipul de date, dar există și specificatori care indică ordinea datelor. Pentru a obține un argument după numărul său (numerotarea începe de la unu), trebuie să scrieți „ % 1$ d ” în loc de „ %d ". Exemplu:
Cod | Rezultat |
---|---|
|
s este egal cu"a=13, b=12, c=11" |
%3$d
va primi al 3-lea argument, %2$d
va primi al doilea argument și %d
va primi chiar primul argument. Specificatorii de format %s
și %d
se referă la argumente, indiferent de specificatorii precum %3$d
sau%2$s
String Pool
„Fiecare șir specificat în cod ca șir literal este stocat într-o zonă de memorie numită în StringPool
timp ce programul rulează. StringPool
este o matrice specială pentru stocarea șirurilor. Scopul său este de a optimiza stocarea șirurilor:
„În primul rând, șirurile specificate în cod trebuie să fie stocate undeva, nu? Codul constă din comenzi, dar datele (în special, șirurile mari) trebuie stocate în memorie separat de cod. În cod apar doar referințele la obiectele șir.
„În al doilea rând, toate literalele șiruri identice trebuie stocate în memorie o singură dată. Și așa funcționează. Când codul clasei dvs. este încărcat de mașina Java, toate literalele șiruri sunt adăugate la dacă nu sunt deja acolo. Dacă StringPool
sunt deja acolo, atunci pur și simplu folosim o referință șir din StringPool
.
În consecință, dacă atribuiți același literal mai multor variabile String din codul dvs., atunci aceste variabile vor conține aceeași referință. O singură dată va fi adăugat un literal StringPool
. În toate celelalte cazuri, codul va primi o referință la șirul deja încărcat în fișierul StringPool
.
Iată aproximativ cum funcționează:
Cod | Lucrul cu StringPoll |
---|---|
|
|
„De aceea variabilele a
și b
vor stoca aceleași referințe.”
„Sper că am înțeles totul corect.
intern()
metodă.
„Și cea mai bună parte este că puteți adăuga în mod programatic orice șir la StringPool
. Pentru a face acest lucru, trebuie doar să apelați metoda String
variabilei intern()
.
„ intern()
Metoda va adăuga șirul în fișierul StringPool
dacă nu este deja acolo și va returna o referință la șirul în fișierul StringPool
.
„Și ce se va întâmpla dacă două șiruri identice sunt adăugate la metoda StringPool
de utilizare intern()
?”
„Metoda va returna aceleași referințe. Aceasta poate fi folosită pentru a compara șiruri prin referință. Exemplu:
Cod | Notă |
---|---|
|
|
|
|
Este puțin probabil să utilizați această metodă des. Acestea fiind spuse, oamenilor le place să întrebe despre asta în interviurile de angajare.
"Deci, este mai bine să știi despre asta decât să nu știi. Mulțumesc, Ellie!"
GO TO FULL VERSION