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