1. StringTokenizer
klase
At ngayon ang ilang mas karaniwang mga sitwasyon na kinasasangkutan ng pagtatrabaho sa mga string. Paano mo hatiin ang isang string sa ilang bahagi? Mayroong ilang mga paraan upang gawin ito.
split()
paraan
Ang unang paraan upang hatiin ang isang string sa maraming bahagi ay ang paggamit ng split()
pamamaraan. Ang isang regular na expression na tumutukoy sa isang espesyal na delimiting string ay dapat ipasa bilang isang argumento. Malalaman mo kung ano ang isang regular na expression sa Java Multithreading quest.
Halimbawa:
Code | Resulta |
---|---|
|
Ang resulta ay isang hanay ng tatlong mga string:
|
Simple, ngunit kung minsan ang diskarte na ito ay labis. Kung mayroong maraming mga delimiter (halimbawa, mga puwang, mga bagong linya ng character, mga tab, mga tuldok), pagkatapos ay kailangan mong bumuo ng isang medyo kumplikadong regular na expression. Mahirap basahin kaya mahirap baguhin.
StringTokenizer
klase
Ang Java ay may espesyal na klase na ang buong trabaho ay hatiin ang isang string sa mga substring.
Ang klase na ito ay hindi gumagamit ng mga regular na expression: sa halip, pumasa ka lang sa isang string na binubuo ng mga delimiter. Ang bentahe ng diskarteng ito ay hindi nito pinuputol ang buong string sa mga piraso nang sabay-sabay, ngunit sa halip ay gumagalaw mula simula hanggang wakas nang paisa-isa.
Ang klase ay may isang constructor at dalawang mahalagang pamamaraan. Ipinapasa namin sa constructor ang isang string na hinati namin sa mga bahagi, at isang string na binubuo ng isang set ng mga character na nagde-delimiting.
Paraan | Paglalarawan |
---|---|
|
Ibinabalik ang susunod na substring |
|
Sinusuri kung may higit pang mga substring. |
Ang klase na ito ay kahit papaano ay nakapagpapaalaala sa klase ng Scanner, na mayroon din nextLine()
at hasNextLine()
mga pamamaraan.
Maaari kang lumikha ng isang StringTokenizer
bagay gamit ang command na ito:
StringTokenizer name = new StringTokenizer(string, delimiters);
Nasaan string
ang string na hahatiin sa mga bahagi. At delimiters
ay isang string, at ang bawat karakter dito ay itinuturing bilang isang delimiter. Halimbawa:
Code | Output ng console |
---|---|
|
|
Tandaan na ang bawat character sa string na ipinasa bilang pangalawang string sa StringTokenizer
constructor ay itinuturing na isang separator.
2. String.format()
paraan at StringFormatter
klase
Ang isa pang kawili-wiling paraan ng String class ay format()
.
Sabihin nating mayroon kang iba't ibang mga variable na nag-iimbak ng data. Paano mo ipapakita ang mga ito sa screen sa isang linya? Halimbawa, mayroon kaming ilang data (kaliwang column) at ninanais na output (kanang column):
Code | Output ng console |
---|---|
|
|
Ang iyong code ay maaaring magmukhang ganito:
Code ng programa |
---|
|
Ang ganitong code ay hindi masyadong nababasa. At kung ang mga variable na pangalan ay mas mahaba, ang code ay magiging mas mahirap:
Code ng programa |
---|
|
Hindi masyadong nababasa, di ba?
Ngunit ito ay isang pangkaraniwang sitwasyon sa mga real-world na programa, kaya gusto kong sabihin sa iyo ang tungkol sa isang paraan upang isulat ang code na ito nang mas simple at mas maigsi.
String.format
Ang String class ay may static format()
na pamamaraan: hinahayaan ka nitong tukuyin ang isang pattern para sa pag-assemble ng string na may data. Ang pangkalahatang hitsura ng utos ay ang mga sumusunod:
String name = String.format(pattern, parameters);
Halimbawa:
Code | Resulta |
---|---|
|
|
|
|
|
|
Ang format()
unang parameter ng pamamaraan ay isang format na string na naglalaman ng lahat ng gustong text kasama ng mga espesyal na character na tinatawag na format specifiers (gaya ng %d
at %s
) sa mga lugar kung saan kailangan mong magpasok ng data.
format()
Pinapalitan ng pamamaraan ang mga ito %s
at %d
ang mga tagatukoy ng format ng mga parameter na sumusunod sa string ng format sa listahan ng parameter. Kung gusto naming magpasok ng isang string, pagkatapos ay isulat namin %s
. Kung gusto naming magpasok ng isang numero, ang format specifier ay %d
. Halimbawa:
Code | Resulta |
---|---|
|
s ay katumbas ng"a=1, b=4, c=3" |
Narito ang isang maikling listahan ng mga tagatukoy ng format na maaaring gamitin sa loob ng string ng format:
Specifier | Ibig sabihin |
---|---|
|
String |
|
interger: byte , short , int ,long |
|
tunay na numero: float ,double |
|
boolean |
|
char |
|
Date |
|
% karakter |
Ang mga specifier na ito ay nagpapahiwatig ng uri ng data, ngunit mayroon ding mga specifier na nagpapahiwatig ng pagkakasunud-sunod ng data. Upang makakuha ng argumento ayon sa numero nito (nagsisimula ang pagnunumero sa isa), kailangan mong isulat ang " " sa halip na " ". Halimbawa:%1$d
%d
Code | Resulta |
---|---|
|
s ay katumbas ng"a=13, b=12, c=11" |
%3$d
ay makakakuha ng ika-3 argumento, %2$d
makakakuha ng pangalawang argumento, at %d
makakakuha ng pinakaunang argumento. Ang %s
at %d
format specifiers ay tumutukoy sa mga argumento anuman ang mga specifier tulad ng %3$d
o%2$s
3. String Pool
Ang bawat string na tinukoy sa code bilang literal na string ay naka-imbak sa isang lugar ng memorya na tinatawag na StringPool
habang tumatakbo ang program. StringPool
ay isang espesyal na array para sa pag-iimbak ng mga string. Ang layunin nito ay i-optimize ang imbakan ng string:
Una, ang mga string na tinukoy sa code ay dapat na naka-imbak sa isang lugar, tama? Binubuo ang code ng mga command, ngunit ang data (lalo na, malalaking string) ay dapat na naka-imbak sa memorya nang hiwalay sa code. Ang mga sanggunian lamang sa mga string na bagay ay lilitaw sa code.
Pangalawa, ang lahat ng magkaparehong string literal ay dapat na naka-imbak sa memorya ng isang beses lamang. At iyon lang kung paano ito gumagana. Kapag ang iyong class code ay na-load ng Java machine, ang lahat ng string literal ay idinaragdag sa StringPool
kung wala pa sila doon. Kung nandoon na sila, gumamit lang kami ng string reference mula sa StringPool
.
Alinsunod dito, kung magtatalaga ka ng parehong literal sa ilang String
mga variable sa iyong code, ang mga variable na ito ay maglalaman ng parehong sanggunian. Isang literal ang idaragdag sa StringPool
isang beses lamang. Sa lahat ng iba pang mga kaso, ang code ay makakakuha ng reference sa string na na-load na sa StringPool
.
Narito ang halos kung paano ito gumagana:
Code | Nagtatrabaho sa StringPool |
---|---|
|
|
Iyon ang dahilan kung bakit ang a
at b
mga variable ay mag-iimbak ng parehong mga sanggunian.
intern()
paraan
At ang pinakamagandang bahagi ay na maaari mong programmatically magdagdag ng anumang string sa StringPool
. Upang gawin ito, kailangan mo lamang tawagan ang pamamaraan String
ng variable intern()
.
intern()
Idaragdag ng pamamaraan ang string sa StringPool
kung wala pa ito, at magbabalik ng reference sa string sa StringPool
.
Kung ang dalawang magkatulad na mga string ay idinagdag sa StringPool
paggamit ng intern()
pamamaraan, ang pamamaraan ay nagbabalik ng parehong sanggunian. Magagamit ito upang ihambing ang mga string sa pamamagitan ng sanggunian. Halimbawa:
Code | Tandaan |
---|---|
|
|
|
|
Malamang na hindi mo madalas gamitin ang paraang ito, ngunit gustong magtanong ng mga tao tungkol dito sa mga panayam . Kaya mas mabuting malaman ang tungkol dito kaysa hindi alam.
GO TO FULL VERSION