1. StringTokenizer klassi
Va yana bir nechta eng ko'p uchraydigan stringlar bilan ishlash usullari. Stringni bir nechta qismlarga qanday bo'lish mumkin? Buning uchun bir nechta usullar mavjud.
split() metodi
Birinchi usul - stringni bir nechta qismlarga bo'lish uchun split() metodidan foydalanishdir. Bunga parametr sifatida muntazam ifodani berish kerak: alohidalovchi stringning maxsus shabloni. Muntazam ifoda nima ekanligini Java Multithreading kvestida o'rganasiz.
Misol:
| Kod | Natija |
|---|---|
|
Natija uchta stringdan iborat massiv bo'ladi: |
Oddiy, lekin ba'zida bunday yondashuv ortiqcha. Agar ko'plab alohidalovchilar mavjud bo'lsa, masalan, "bo'shliq", "enter", "tab", "nuqta", ulkan muntazam ifodani yaratishga to'g'ri keladi. Uni o'qish qiyin, demak, unga o'zgartirish kiritish ham qiyin.
StringTokenizer klassi
Java'da maxsus klass mavjud, bu klassning butun ishi stringni kichik stringlarga ajratishdan iborat.
Bu klass muntazam ifodalardan foydalanmaydi: buning o'rniga, unga faqat alohidalovchi belgilar qatori beriladi. Bu yondashuvning afzalliklaridan biri shundaki, u butun stringni darhol parchalarga ajratmaydi, balki oxirigacha asta-sekin boradi.
Klass konstruktor va ikkita asosiy metoddan iborat. Konstruktoriga ajratayotgan string va ajratishda ishlatiladigan belgilar to'plami sifatida qator kiritish kerak.
| Metodlar | Tavsif |
|---|---|
|
Keyingi kichik stringni qaytaradi |
|
Kichik stringlar bor-yo'qligini tekshiradi. |
Bu klass Scanner klassiga biroz o'xshab ketadi, unda ham nextLine() va hasNextLine() metodlari mavjud edi.
StringTokenizer obyektini yaratish uchun quyidagi buyruqdan foydalaning:
StringTokenizer name = new StringTokenizer(string, delimiters);
Bu erda string - bu string, biz qisimlarga ajratamiz. Va delimiters - bu har bir belgi alohidalovchi sifatida hisoblanadigan qator bo'ladi. Misol:
| Kod | Ekranda chiqarish |
|---|---|
|
|
E'tibor bergan bo'lsangiz, alohidalovchi sifatida konstruktor StringTokenizerdga kiritilgan ikkinchi stringdagi har bir belgi hisoblanadi.
2. String.format() metodi va StringFormatter klassi
Va String klassining yana bir qiziqarli metodi - format().
Deylik, sizda turli o'zgaruvchilar bor. Ularni bitta qator sifatida ekranga qanday chiqarish mumkin? Masalan, bizda ma'lumotlar (chap ustun) va kerakli natija (o'ng ustun) bor:
| Kod | Ekranda chiqarish |
|---|---|
|
|
Ko'pincha, kodingiz taxminan shunday ko'rinishda bo'ladi:
| Dastur kodi |
|---|
|
Bunday kod oson o'qilmaydi. Bundan tashqari, agar o'zgaruvchilar nomlari uzunroq bo'lsa, kod yanada qiyinlashadi:
| Dastur kodi |
|---|
|
Bu oson o'qilmaydi, shunday emasmi?
Lekin haqiqiy dasturlarda bunday holat ko'pincha uchraydi, shuning uchun men bu kodni qanday qilib osonroq va qisqaroq yozish mumkinligini aytib bermoqchiman.
String.format
String klassida format() deb nomlangan statik metod mavjud: u stringlarni ma'lumotlar bilan birlashtirish uchun shablonni belgilash imkonini beradi. Bu buyruqning umumiy ko'rinishi quyidagicha:
String name = String.format(shablon, parametrlar);
Misol:
| Kod | Natija |
|---|---|
|
|
|
|
|
|
format() metodiga birinchi parametr sifatida shablon qatori yuboriladi, unda butun kerakli matn bor va ma'lumotlarni qo'shish kerak bo'lgan joylarda %d, %s kabi maxsus belgilar ko'rsatilgan.
Ushbu %s va %d format() metodi to'g'ridan-to'g'ri shablondan keyin kelgan parametrlar bilan almashtiriladi. Agar sifatida string qo'shilishi kerak bo'lsa, biz %s deb yozamiz, agar son bo'lsa - %d. Misol:
| Kod | Natija |
|---|---|
|
s ning qiymati "a=1, b=4, c=3" bo'ladi |
Bu yerda shablon ichida foydalanish mumkin bo'lgan parametrlar ro'yxati:
| Belgisi | Ma'nosi |
|---|---|
|
String |
|
butun son: byte, short, int, long |
|
real son: float, double |
|
boolean |
|
char |
|
Date |
|
% belgisi |
Bu parametrlar ma'lumotlar turini belgilaydi, lekin mavjud boshqa parametrlar ham bor, ular ma'lumotlarning joylashuvini belgilaydi. Parametrni uning raqamiga ko'ra olish uchun (raqamlash birdan boshlanadi), %1$d o'rniga %d yozish kerak. Misol:
| Kod | Natija |
|---|---|
|
s ning qiymati "a=13, b=12, c=11" bo'ladi |
%3$d 3-parametrni oladi, %2$d esa ikkinchi parametrni oladi. %d birinchi parametrni oladi. Shablon parametrlar %s, %d o'zgaruvchilarga %3$d yoki %2$s kabi shablon parametrlaridan mustaqil murojaat qiladi.
3. String Pool
Kodda literallar ko'rinishida berilgan barcha qatorlar, dastur ishlayotgan vaqtida StringPool deb nomlangan xotirada saqlanadi. StringPool — qatorlarni saqlash uchun maxsus jadvaldir (aslida, xesh-jadval). Uning yaratilishidagi maqsad — qatorlarni saqlashni optimallashtirish:
Birinchidan, kodda berilgan qatorlar baribir biror joyda saqlanishi kerak. Kod — bu buyruqlar, va ma'lumotlar (ayniqsa, xuddi qatorlar kabi katta bo'lganlari) koddan alohida xotirada saqlanishi kerak. Kodda faqat qator-ob'yektlariga ishoratlar uchraydi.
Ikkinchidan, bir xil literallar xotirada faqat bir marta saqlanishi mumkin. Bu shunday ishlaydi: har bir qator literali uchun Java-mashinasi StringPooldagi qatordan foydalanadi. Agar bunday qator u yerda hali yo'q bo'lsa, u qo'shiladi, agar allaqachon bo'lsa, unga ishora ishlatiladi. (Bu aynan qachon sodir bo'lishi — sinf yuklanganda yoki literal birinchi marta ishlatilganda — JVM amalga oshirilishiga bog'liq.)
Shuning uchun, agar kodingizda bir nechta String o'zgaruvchilarga bir xil literallarni tayinlasangiz, o'zgaruvchilar bir xil manzillarni saqlaydi. StringPoolga literal faqat bir marta qo'shiladi, qolgan hollarda StringPoolga allaqachon yuklangan qator uchun ishorat olinadi.
Bu qanday ishlashini taxminan:
| Kod | StringPool bilan ish |
|---|---|
|
|
Shuning uchun a va b o'zgaruvchilar bir xil ishoralarni saqlaydi.
intern() metodi
Va eng qiziqarli tomoni: siz dasturiy ravishda StringPoolga istalgan qatorni qo'shishingiz mumkin. Buning uchun String o'zgaruvchi bilan intern() metodini chaqirish kifoya.
intern() metodi qatorni StringPoolga qo'shadi, agar u hali u yerda bo'lmasa, va StringPooldan qator uchun ishoratni qaytaradi.
Agar StringPoolga intern() metodi orqali ikkita bir xil qator qo'shsangiz, metod bir xil ishoralarni qaytaradi. Bu qatorlarni ishorat orqali taqqoslash uchun ishlatilishi mumkin. Misol:
| Kod | Eslatma |
|---|---|
|
|
|
|
Bu metoddan tez-tez foydalanishingiz dargumon, lekin bu savol intervyu paytida ko'p beriladi, shuning uchun bu haqda bilgan yaxshi.
GO TO FULL VERSION