Uploaded by elbek90088

dasturlsh string

advertisement
Chapter 11: Strings
Stringlar java.lang
. String
() - bu dasturingizda saqlangan matn qismlari. Stringlar Java-da ibtidoiy ma'lumotlar turi emas, ammo
ular Java dasturlarida juda keng tarqalgan.
Java-da Stringlar o'zgarmasdir, ya'ni ularni o'zgartirib bo'lmaydi. (O'zgarmaslikni batafsilroq tushuntirish uchun bu yerni bosing.)
Section 11.1: Satrlarni solishtirish
Stringlarni tenglik uchun solishtirish uchun String obyektining teng yoki equalsIgnoreCase usullaridan foydalanish kerak.
Masalan, quyidagi snippet Stringning ikkita nusxasi barcha belgilarda teng ekanligini aniqlaydi:
Live demo
This example will compare them, independent of their case:
Live demo
E'tibor bering, equalsIgnoreCase sizga Mahalliy tilni belgilashga ruxsat bermaydi. Masalan, ingliz tilidagi ikkita "Taki" va
"TAKI" so'zlarini solishtirsangiz, ular tengdir; biroq turkchada ular boshqacha (turk tilida I kichik harfi ı). Bu kabi holatlar
uchun ikkala satrni Locale bilan kichik (yoki katta harf) ga aylantirish va keyin tenglar bilan solishtirish yechimdir.
Live demo
Stringlarni solishtirish uchun == operatoridan foydalanmang
Agar barcha satrlar oʻrnatilganligiga kafolat bera olmasangiz (pastga qarang), Stringlarni solishtirish uchun == yoki !=
operatorlaridan foydalanmasligingiz kerak. Ushbu operatorlar aslida havolalarni sinab ko'rishadi va bir nechta String ob'ektlari bir
xil Stringni ifodalashi mumkinligi sababli, bu noto'g'ri javob berishi mumkin.
String . teng (ob'ekt
Buning o'rniga String ob'ektlarini qiymatlari asosida taqqoslaydigan ) usulidan foydalaning. Batafsil tushuntirish uchun Pitfall-ga
qarang: satrlarni solishtirish uchun == dan foydalaning.
GoalKicker.com – Java® Notes for Professionals
51
Switch bayonotidagi satrlarni solishtirish
Versiya ≥ Java SE 7
String . teng
Java 1.7 dan boshlab, switch bayonotida String o'zgaruvchisini harflar bilan solishtirish mumkin. String null emasligiga ishonch
hosil qiling, aks holda u har doim NullPointerException ni chiqaradi. Qiymatlar yordamida solishtiriladi, ya'ni katta-kichik harf
sezgir.
Live demo
Stringlarni doimiy qiymatlar bilan solishtirish
Stringni doimiy qiymat bilan solishtirganda, agar boshqa String null bo'lsa, NullPointerException ni olmaslik uchun tenglikning
chap tomoniga doimiy qiymatni qo'yishingiz mumkin.
foo.equals ("baz") agar foo null bo'lsa, "baz" NullPointerExceptionni chiqaradi. teng (foo
while ) noto'g'ri deb baholanadi.
Versiya ≥ Java SE 7
Ob'ektlar.teng
Ko'proq o'qilishi mumkin bo'lgan muqobil - ikkala parametr bo'yicha null tekshiruvini amalga oshiradigan () dan foydalanish:
Objects.equals (foo, "baz"
).
(Eslatma: Umuman olganda, NullPointerExceptions dan qochish yaxshiroqmi yoki ular sodir bo'lishiga yo'l qo'yib, keyin asosiy
sababni tuzatish kerakmi, bu bahs-munozaralarga sabab bo'ladi; bu erda va bu erda qarang. Albatta, qochish strategiyasini "eng
yaxshi amaliyot" deb atash oqlanmaydi.) String buyurtmalar
< String > bilan string bilan solishtirish mumkin. solishtiring
String klassi usulni amalga oshiradi (boshida tavsiflanganidek
Comparator < String
GoalKicker.com – Java® Notes for Professionals
52
bu misol). Bu String ob'ektlarining tabiiy tartibini katta-kichik harflarga sezgir tartibga soladi. String sinfi
CASE_INSENSITIVE_ORDER deb nomlangan > konstantasini katta-kichik harflarga sezgir bo'lmagan tartiblash uchun mos beradi.
Interned Strings bilan solishtirish
Java tili spetsifikatsiyasi (JLS 3.10.6) quyidagilarni bildiradi:
String . stajyor
"Bundan tashqari, string literal har doim String sinfining bir xil namunasiga ishora qiladi. Buning sababi, string literallari
- yoki, umuman olganda, doimiy ifodalarning qiymatlari bo'lgan satrlar - almashish uchun o'rnatiladi
usuli yordamida noyob misollar."
String . stajyor
Bu shuni anglatadiki, == dan foydalangan holda ikkita satr literaliga havolalarni solishtirish xavfsizdir. Bundan tashqari, () usuli
yordamida ishlab chiqarilgan String ob'ektlariga havolalar uchun ham xuddi shunday.
For example:
Sahna orqasida interning mexanizmi hali ham kirish mumkin bo'lgan barcha interned satrlarni o'z ichiga olgan xesh jadvalini saqlaydi.
Stringda () ga qo'ng'iroq intern
qilganingizda, usul xesh jadvalidagi ob'ektni qidiradi:
Agar satr topilsa, u holda bu qiymat interned satr sifatida qaytariladi.
Aks holda, satrning nusxasi xesh-jadvalga qo'shiladi va bu satr interned satr sifatida qaytariladi.
Satrlarni == yordamida solishtirishga ruxsat berish uchun interningdan foydalanish mumkin. Biroq, buni amalga oshirishda jiddiy
muammolar mavjud; Pitfall - Interning strings ga qarang, shunda siz == dan foydalanishingiz mumkin - tafsilotlar uchun yomon fikr.
Aksariyat hollarda tavsiya etilmaydi.
Section 11.2: Changing the case of characters within a String
String turi katta va kichik harflar orasidagi satrlarni o'zgartirishning ikkita usulini taqdim etadi:
Barcha belgilarni katta harfga aylantirish uchun toUpperCase, barcha belgilarni kichik harflarga aylantirish uchun Kichik Harf
Bu usullar ikkalasi ham oʻzgartirilgan satrlarni yangi String namunalari sifatida qaytaradi: asl String obyektlari oʻzgartirilmaydi, chunki
String Java’da oʻzgarmasdir. O'zgarmaslik haqida ko'proq ma'lumot olish uchun qarang: Java-dagi satrlarning o'zgarmasligi
String upper = string.toUpperCase();
GoalKicker.com – Java® Notes for Professionals
53
String lower = string.toLowerCase();
System.out.println(string); // prints "This is a Random String"
System.out.println(lower); // prints "this is a random string"
System.out.println(upper); // prints "THIS IS A RANDOM STRING"
Raqamlar va tinish belgilari kabi alifbo bo'lmagan belgilarga bu usullar ta'sir qilmaydi. Shuni esda tutingki, ushbu usullar muayyan
sharoitlarda ma'lum Unicode belgilar bilan noto'g'ri ishlashi mumkin.
Eslatma: Bu usullar mahalliy sozlarga sezgir va ular tildan mustaqil ravishda talqin qilinadigan satrlarda ishlatilsa, kutilmagan natijalar
berishi mumkin. Masalan, dasturlash tili identifikatorlari, protokol kalitlari va HTML teglari.
\u0131
"TITLE". Turk tilidagi toLowerCase () "title" ni qaytaradi
Masalan, ", bu erda ı () LOTIN KICHIK
Mahalliy. ROOT
toLowerCase ( Mahalliy . ROOT
DOTLESS I harfi. Mahalliy parametrlarga sezgir boʻlmagan satrlar boʻyicha toʻgʻri natijalarga erishish uchun katta-kichik harflarni mos
oʻzgartirish usuliga parametr sifatida oʻtkazing (masalan, ) yoki
toUpperCase ( Mahalliy . ROOT
)).
Mahalliy. INGLIZ TILI ham ko'p hollarda to'g'ri, tilning o'zgarmas usuli Locale dir. ROOT
Foydalansa ham.
Maxsus korpusni talab qiladigan Unicode belgilarning batafsil ro'yxatini Unicode Consortium veb-saytida topish mumkin.
ASCII satrida ma'lum bir belgining katta-kichikligini o'zgartirish:
ASCII satrining ma'lum bir belgisining registrini o'zgartirish uchun quyidagi algoritmdan foydalanish mumkin:
Qadamlar:
1. Satrni e'lon qiling.
2. Satrni kiriting.
3. Satrni belgilar massiviga aylantiring.
4. Qidiriladigan belgini kiriting.
5. Belgilar qatoridan belgini qidiring.
6. Agar topilsa, belgining kichik yoki katta ekanligini tekshiring.
Agar katta harf bo'lsa, belgining ASCII kodiga 32 qo'shing.
Agar kichik harf bo'lsa, belgining ASCII kodidan 32 ni olib tashlang.
7. Character massividan asl belgini o'zgartiring.
8. Belgilar massivini yana satrga aylantiring.
Voila, qahramonning ishi o'zgartirildi.
Algoritm kodiga misol:
GoalKicker.com – Java® Notes for Professionals
54
Section 11.3: Finding a String Within Another String
String . o'z ichiga oladi
Muayyan a satri b qatorida mavjud yoki yo'qligini tekshirish uchun quyidagi sintaksis bilan () usulidan foydalanishimiz mumkin:
b.contains(a); // Return true if a is contained in b, false otherwise
The String . contains () method can be used to verify if a CharSequence can be found in the String. The method looks for the
String a in the String b in a case-sensitive way.
Live Demo on Ideone
To find the exact position where a String starts within another String, use ():
String
. indexOf
String s = "this is a long sentence"; int i = s.indexOf('i'); // the first 'i' in String is at index 2 int j = s.indexOf("long"); // the
index of the first occurrence of "long" in s is 10 int k = s.indexOf('z'); // k is -1 because 'z' was not found in String s int h =
s.indexOf("LoNg"); // h is -1 because "LoNg" was not found in String s
Live Demo on Ideone
String
. indexOf
String . o'z oladi
Muayyan a satri b qatorida mavjud yoki yo'qligini aniqlash uchun () usulidan sintaksis bilan borishimiz mumkin:
Note: The () method is case sensitive.
Example of search ignoring the case:
Live Demo on Ideone
Section 11.4: String pool and heap storage
Ko'pgina Java ob'ektlari singari, barcha String misollari to'pda, hatto literallarda ham yaratilgan. JVM yig'ma ichida ekvivalent
havolaga ega bo'lmagan String literalini topganda, JVM to'plamda mos keladigan String misolini yaratadi va u shuningdek String
hovuzida yangi yaratilgan String misoliga havolani saqlaydi. Xuddi shu String literaliga boshqa har qanday havolalar yig'ma ichida
avval yaratilgan String misoli bilan almashtiriladi.
Keling, quyidagi misolni ko'rib chiqaylik:
GoalKicker.com – Java® Notes for Professionals
55
The output of the above is:
true
true
true
true
String yaratish uchun qoʻsh qoʻshtirnoqdan foydalansak, u birinchi navbatda String hovuzida bir xil qiymatga ega Stringni qidiradi,
agar topilsa, havolani qaytaradi, aks holda u hovuzda yangi String yaratadi va keyin havolani qaytaradi.
Biroq, new operatoridan foydalanib, biz String sinfini yig'ish maydonida yangi String ob'ektini yaratishga majbur qilamiz. Uni hovuzga
qo'yish uchun intern() usulidan foydalanishimiz yoki bir xil qiymatga ega bo'lgan string hovuzidagi boshqa String ob'ektiga murojaat
qilishimiz mumkin.
String hovuzining o'zi ham to'pda yaratilgan.
Versiya < Java SE 7
GoalKicker.com – Java® Notes for Professionals
56
Java 7 dan oldin String literallari PermGen metodi sohasidagi ish vaqti doimiy hovuzida saqlangan, ular belgilangan o'lchamga ega
edi.
String hovuzi ham PermGen shahrida joylashgan.
Version ≥ Java SE 7
RFC: 6962931
JDK 7 da interned satrlar endi Java to'plamining doimiy avlodida ajratilmaydi, balki dastur tomonidan yaratilgan boshqa
ob'ektlar bilan bir qatorda Java to'plamining asosiy qismida (yosh va eski avlodlar deb nomlanadi) ajratiladi. . Ushbu
o'zgarish asosiy Java to'plamida ko'proq ma'lumotlarga va doimiy avlodda kamroq ma'lumotlarga olib keladi va shuning
uchun yig'ish o'lchamlarini sozlashni talab qilishi mumkin. Aksariyat ilovalar bu o'zgarish tufayli yig'ma foydalanishda
nisbatan kichik farqlarni ko'radi, lekin ko'p sinflarni yuklaydigan yoki () usulidan ko'p foydalanadigan kattaroq ilovalar
sezilarli farqlarni ko'radi.
String . intern
Section 11.5: Splitting Strings
You can split a String on a particular delimiting character or a Regular Expression, you can use the () method that String
has the following signature:
. split
E'tibor bering, chegaralovchi belgi yoki muntazam ifoda hosil bo'lgan string massividan o'chiriladi.
Chegaruvchi belgidan foydalanishga misol:
String lineFromCsvFile = "Mickey;Bolton;12345;121216";
String[] dataCells = lineFromCsvFile.split(";");
// Result is dataCells = { "Mickey", "Bolton", "12345", "121216"}; Example using regular expression:
String lineFromInput = "What do you need from me?";
String[] words = lineFromInput.split("\\s+"); // one or more space chars
// Result is words = {"What", "do", "you", "need", "from", "me?"}; You can even directly split a
String literal:
String[] firstNames = "Mickey, Frank, Alicia, Tom".split(", ");
// Result is firstNames = {"Mickey", "Frank", "Alicia", "Tom"};
Warning: Do not forget that the parameter is always treated as a regular expression.
Oldingi misolda. har qanday belgiga mos keladigan muntazam ifoda joker belgisi sifatida ko'rib chiqiladi va har bir belgi chegaralovchi
bo'lgani uchun natija bo'sh massiv bo'ladi.
Splitting based on a delimiter which is a regex meta-character
Quyidagi belgilar regexda maxsus (aka meta-belgilar) hisoblanadi
Yuqoridagi chegaralovchilardan biriga asoslanib satrni ajratish uchun ularni \\ orqali olib tashlashingiz yoki foydalanishingiz kerak.
GoalKicker.com – Java® Notes for Professionals
57
Split bo'sh qiymatlarni olib tashlaydi
ajratish (ajratish
) sukut bo'yicha natijalar qatoridan keyingi bo'sh satrlarni olib tashlaydi. Ushbu mexanizmni o'chirish uchun bizga kerak
bo'linish (ajratish, chegara
ning haddan tashqari yuklangan versiyasidan foydalanish uchun cheklov kabi salbiy qiymatga o'rnatilgan
split (regex) ichki bo'linish natijasini qaytaradi (regex,
0).
Cheklov parametri naqsh qo'llanilishi sonini nazorat qiladi va shuning uchun olingan massiv uzunligiga ta'sir qiladi.
Agar n chegarasi noldan katta bo'lsa, naqsh eng ko'p n - 1 marta qo'llaniladi, massiv uzunligi n dan katta bo'lmaydi va massivning
oxirgi yozuvi oxirgi mos keladigan ajratuvchidan tashqari barcha kirishlarni o'z ichiga oladi.
Agar n salbiy bo'lsa, naqsh imkon qadar ko'p marta qo'llaniladi va massiv istalgan uzunlikka ega bo'lishi mumkin. Agar n nolga
teng bo'lsa, naqsh imkon qadar ko'p marta qo'llaniladi, massiv istalgan uzunlikka ega bo'lishi mumkin va keyingi bo'sh satrlar
o'chiriladi.
StringTokenizer yordamida bo'linish
Split
() usulidan tashqari, StringTokenizer yordamida satrlarni ajratish ham mumkin.
String . Split
String . Split
StringTokenizer () ga qaraganda ancha cheklangan va undan foydalanish biroz qiyinroq. U asosan belgilangan belgilar to'plami
(String sifatida berilgan) bilan chegaralangan tokenlarni chiqarish uchun mo'ljallangan. Har bir belgi ajratuvchi vazifasini bajaradi.
Ushbu cheklov tufayli u () dan ikki baravar tezroq.
Birlamchi belgilar to'plami bo'sh joylardir (\t\n\r\f). Quyidagi misolda har bir so'z alohida chop etiladi.
GoalKicker.com – Java® Notes for Professionals
58
This will print out:
Ajratish uchun turli belgilar to'plamidan foydalanishingiz mumkin.
This will print out:
Section 11.6: Joining Strings with a delimiter
Version ≥ Java SE 8
Satrlar massivini statik usul () yordamida birlashtirish mumkin:
String
. join
String . join haddan tashqari yuklangan () usuli mavjud.
Xuddi shunday, Iterables uchun
Qo'shilish ustidan nozik nazoratga ega bo'lish uchun siz StringJoiner sinfidan foydalanishingiz mumkin:
To join a stream of strings, you may use the joining collector:
Stream<String> stringStream = Stream.of("foo", "bar", "foobar");
String joined = stringStream.collect(Collectors.joining(", ")); System.out.println(joined); //
Prints "foo, bar, foobar" There's an option to define prefix and suffix here as well:
GoalKicker.com – Java® Notes for Professionals
59
Stream<String> stringStream = Stream.of("foo", "bar", "foobar");
String joined = stringStream.collect(Collectors.joining(", ", "{", "}"));
System.out.println(joined); // Prints "{foo, bar, foobar}"
Section 11.7: String concatenation and StringBuilders
Satrlarni birlashtirish + operatori yordamida amalga oshirilishi mumkin. Masalan:
Odatda kompilyator ilovasi yuqoridagi birikmani kaput ostidagi StringBuilder yordamida amalga oshiradi. Kompilyatsiya qilinganida,
kod quyidagiga o'xshash bo'ladi:
StringBuilder-da har xil turlarni qo'shish uchun bir nechta ortiqcha yuklangan usullar mavjud, masalan, String o'rniga int qo'shish. Misol uchun,
dastur o'zgartirishi mumkin:
to the following:
Yuqoridagi misollar kodning bitta joyida samarali bajariladigan oddiy birlashtirish operatsiyasini ko'rsatadi. Birlashtirish StringBuilder
ning bitta nusxasini o'z ichiga oladi. Ba'zi hollarda birlashma kumulyativ tarzda amalga oshiriladi, masalan, tsiklda:
Bunday hollarda kompilyatorni optimallashtirish odatda qo'llanilmaydi va har bir iteratsiya yangi StringBuilder ob'ektini yaratadi.
Buni bitta StringBuilder-dan foydalanish uchun kodni aniq o'zgartirish orqali optimallashtirish mumkin:
StringBuilder faqat 16 belgidan iborat bo'sh joy bilan ishga tushiriladi. Agar siz kattaroq satrlarni qurishni oldindan bilsangiz,
ichki bufer hajmini o'zgartirishga hojat qolmasligi uchun uni oldindan etarli hajmda ishga tushirish foydali bo'lishi mumkin:
StringBuilder buf = new StringBuilder(30); // Default is 16 characters buf.append("0123456789");
buf.append("0123456789"); // Would cause a reallocation of the internal buffer otherwise String result = buf.toString(); //
Produces a 20-chars copy of the string If you are producing many strings, it is advisable to reuse StringBuilders:
GoalKicker.com – Java® Notes for Professionals
60
Agar bir xil buferga bir nechta iplar yozilsa (va faqat bo'lsa), StringBuilder-ning sinxronlashtirilgan versiyasi bo'lgan StringBuffer-dan
foydalaning. Odatda buferga faqat bitta ip yozishi sababli, StringBuilder dasturini sinxronizatsiyasiz ishlatish odatda tezroq bo'ladi.
Using concat() method:
Bu oxirida string2 qo'shilgan string1 bo'lgan yangi qatorni qaytaradi. Shuningdek, concat() usulini string literallari bilan ham
ishlatishingiz mumkin, masalan:
Section 11.8: Substrings
String s = "this is an example";
String a = s.substring(11); // a will hold the string starting at character 11 until the end ("example")
String b = s.substring(5, 10); // b will hold the string starting at character 5 and ending right before character 10 ("is an")
String b = s.substring(5, b.length()-3); // b will hold the string starting at character 5 ending right before b' s lenght is out of 3 ("is an exam")
Pastki satrlar, shuningdek, asl Stringga belgilar qo'shish/almashtirish uchun ham qo'llanilishi mumkin. Misol uchun, siz xitoycha
belgilarni o'z ichiga olgan xitoy sanasiga duch keldingiz, lekin siz uni yaxshi formatdagi Sana qatori sifatida saqlamoqchisiz.
年
月
日
Substring usuli Stringning bir qismini ajratib oladi. Bitta parametr taqdim etilganda, parametr boshlang'ich hisoblanadi va parcha
String oxirigacha cho'ziladi. Ikkita parametr berilganda, birinchi parametr boshlang'ich belgi, ikkinchi parametr esa oxiridan darhol
keyin belgining indeksidir (indeksdagi belgi qo'shilmaydi). Tekshirishning oson usuli - birinchi parametrni ikkinchisidan ayirish
qatorning kutilgan uzunligini berishi kerak.
Version < Java SE 7
JDK <7u6 versiyalarida pastki qator usuli asl String bilan bir xil qo'llab-quvvatlovchi [] ga ega bo'lgan va natija char boshlanishi va
uzunligiga o'rnatilgan ichki ofset va hisoblash maydonlariga ega bo'lgan Stringni yaratadi. Bunday almashish mumkin
yangi String ( s.substring ( ...
char
nusxasini yaratishga majburlash uchun )) qo'ng'iroq qilish orqali oldini olish mumkin bo'lgan xotira oqishiga olib keladi, shundan
so'ng [] axlat yig'ilishi mumkin.
Version ≥ Java SE 7
char
GoalKicker.com – Java® Notes for Professionals
61
JDK 7u6 dan pastki qator usuli har doim barcha asosiy [] massivni nusxalaydi, bu murakkablikni oldingi doimiyga nisbatan chiziqli
qiladi, lekin bir vaqtning o'zida xotira oqishining yo'qligini kafolatlaydi.
Section 11.9: Platform independent new line separator
Yangi chiziq ajratgich platformadan platformaga farq qilganligi sababli (masalan, Unix-ga o'xshash tizimlarda \n yoki Windowsda
\r\n) unga kirishning platformadan mustaqil usuli bo'lishi kerak. Java-da uni tizim xususiyatidan olish mumkin:
Version ≥ Java SE 7
Yangi chiziq ajratgich juda tez-tez talab qilinganligi sababli, Java 7-dan yuqoridagi kod bilan bir xil natijani qaytaruvchi yorliq usulida
mavjud:
Yangi chiziq ajratgich juda tez-tez talab qilinganligi sababli, Java 7-dan yuqoridagi kod bilan bir xil natijani qaytaruvchi yorliq
usulida mavjud:
System.out.println(String.format('line 1: %s.%nline 2: %s%n', lines[0],lines[1]));
Section 11.10: Reversing Strings
1. Stringni orqaga qaytarish uchun bir nechta usul mavjud.
2. StringBuilder/StringBuffer:
3. Char array:
GoalKicker.com – Java® Notes for Professionals
62
Section 11.11: Adding toString() method for custom objects
Agar siz yangi Person ob'ektini yaratsangiz:
va keyinchalik kodingizda ob'ektni chop etish uchun quyidagi bayonotdan foydalanasiz:
Live Demo on Ideone you'll get an output similar
to the following:
Bu ob'ekt sinfida aniqlangan () usulini amalga
toString
oshirish natijasidir, yuqori sinf
Ob'ekt. toString
Shaxs. () hujjatida quyidagilar aytiladi:
The toString method for class Object returns a string consisting of the name of the class of which the object is an instance,
the at-sign character `@', and the unsigned hexadecimal representation of the hash code of the object. In other words,
this method returns a string equal to the value of: getClass().getName() + '@' + Integer.toHexString(hashCode())
Shunday qilib, mazmunli chiqish uchun siz () usulini bekor
toString
qilishingiz kerak bo'ladi:
Now the output will be:
My name is John and my age is 25
You can also write
Live Demo on Ideone
GoalKicker.com – Java® Notes for Professionals
63
Aslida, println
() ob'ektda toString usulini bilvosita chaqiradi.
Section 11.12: Remove Whitespace from the Beginning and End of a
String
()
trim usuli oldingi va keyingi bo'shliqlar olib tashlangan yangi Stringni qaytaradi.
Agar siz olib tashlash uchun bo'sh joy bo'lmagan Stringni kessangiz, sizga xuddi shu String namunasi qaytariladi.
kesish
Xarakter. bo'sh joy
E'tibor bering, () usulida bo'sh joy haqidagi o'z tushunchasi mavjud bo'lib, u () usulida qo'llaniladigan tushunchadan farq qiladi:
0000 dan U+ 0020 gacha
U+ kodli barcha ASCII boshqaruv belgilari bo'sh joy hisoblanadi va ular tomonidan o'chiriladi
kesish (). Bunga U+ 0020 "SPACE" , U+ 0009 "CHARACTER TABULATION" , U+ 000A "LINE FEED" va U+ 000D kiradi
0007 "QO'NG'IROQ"
"CARRIAGE RETURN" belgilar, balki U+ kabi belgilar ham.
00A0 "NO-BREAK SPACE" yoki U+ 2003 "EM SPACE" trim orqali tan olinmaydi
Unicode bo'sh joy kabi U+ ().
Section 11.13: Case insensitive switch
Version ≥ Java SE 7
switch o'zini katta-kichik harflarga sezgir bo'lmagan qilib parametrlash mumkin emas, lekin agar juda zarur bo'lsa, () yoki yordamida
kirish qatoriga befarq
toLowerCase
bo'lishi mumkin.
toUpperCase:
Beware
Mahalliy holat o'zgaruvchan holatlarga ta'sir qilishi mumkin!
Yorliqlarda katta harflar bo'lmasligi uchun ehtiyot bo'lish kerak - ular hech qachon bajarilmaydi!
Se
ction 11.14: Replacing parts of Strings
O'zgartirishning ikki yo'li: regex yoki aniq moslik bilan.
Eslatma: asl String ob'ekti o'zgarmaydi, qaytarish qiymati o'zgartirilgan Stringni ushlab turadi.
Aniq moslik
Bitta belgini boshqa bitta belgi bilan almashtiring:
GoalKicker.com – Java® Notes for Professionals
64
Result:
Replace sequence of characters with another sequence of characters:
String replace(CharSequence target, CharSequence replacement)
Regex
Note: guruhlash $1 kabi guruhlarga murojaat qilish uchun $ belgisidan foydalanadi.
Replace all matches:
GoalKicker.com – Java® Notes for Professionals
65
Section 11.15: Getting the length of a String
String obyektining uzunligini olish uchun undagi () usulini
soniga teng.
length
chaqiring. Uzunlik qatordagi UTF-16 kod birliklari (belgilar)
Live Demo on Ideone
Stringdagi belgi UTF-16 qiymatidir. Qiymatlari ≥ 0x1000 bo'lgan Unicode kod nuqtalari (masalan, ko'pchilik emojilar) ikkita belgi
pozitsiyasidan foydalanadi. Stringdagi Unicode kod nuqtalari sonini hisoblash uchun, har bir kod nuqtasi UTF-16 belgilar qiymatiga
mos kelishidan qat'i nazar, codePointCount usulidan foydalanishingiz mumkin:
You can also use a Stream of codepoints, as of Java 8:
Section 11.16: Getting the nth character in a String
Satrdagi n-belgini olish uchun satrda (n) ga qo'ng'iroq charAt qiling, bu erda n - siz olishni istagan belgi indeksi
Izoh: n indeksi 0 dan boshlanadi, shuning uchun birinchi element n=0 da.
Section 11.17: Counting occurrences of a substring or character in a
string
org.apache.commons.lang3.StringUtils dan countMatches usuli odatda Stringdagi pastki satr yoki belgilarning takrorlanishini hisoblash uchun
ishlatiladi:
GoalKicker.com – Java® Notes for Professionals
66
Aks holda, standart Java API bilan bir xil bo'lsa, siz Muntazam ifodalardan foydalanishingiz mumkin:
GoalKicker.com – Java® Notes for Professionals
67
Download