Skip to content

String (matn)

String — belgilarni tartibli ketma-ketlikda saqlash uchun ishlatiladigan ma’lumotlar tuzilmasi. Dastur ichidagi ism, xabar, parol, elektron pochta manzili, fayl nomi, qidiruv so‘rovi yoki butun bir kitob matni string ko‘rinishida ifodalanishi mumkin.

"Salom, dunyo!"

Bu yozuv tashqaridan bitta yaxlit matnga o‘xshaydi. Kompyuter uchun esa u ketma-ket joylashgan alohida belgilar to‘plamidir:

Index:     0     1     2     3     4
         +-----+-----+-----+-----+-----+
Belgi:   |  S  |  a  |  l  |  o  |  m  |
         +-----+-----+-----+-----+-----+

Stringni o‘rganishda faqat qo‘shtirnoq ichida matn yozishni bilish yetarli emas. Quyidagi savollarga ham javob bera olish kerak:

  • kompyuter harflarni qanday qilib son ko‘rinishida saqlaydi;
  • bitta “belgi” xotirada qancha joy egallaydi;
  • nima uchun matn uzunligi ba’zan ko‘rinib turgan belgilar soniga teng bo‘lmaydi;
  • string nima sababdan arrayga o‘xshaydi;
  • string ustidagi ayrim amallar nima uchun qimmatga tushadi.

String dasturlashdagi eng ko‘p ishlatiladigan tuzilmalardan biri. Foydalanuvchidan keladigan ma’lumotlarning katta qismi dasturga dastlab string sifatida kiradi. Internet orqali yuboriladigan so‘rovlar, konfiguratsiya fayllari, loglar va ma’lumotlar bazasidagi ko‘plab maydonlar ham matn ko‘rinishida bo‘ladi. Shu sababli stringni to‘g‘ri tushunish faqat algoritmlar uchun emas, kundalik dasturlash uchun ham muhim.

Belgi, string va bo‘sh string

String bilan ishlashda uchta tushunchani ajratish kerak:

  • character — bitta belgi;
  • string — tartibli belgilar ketma-ketligi;
  • length — string ichidagi birliklar soni.

Masalan:

'A'       → bitta belgi
"Array"   → belgilar ketma-ketligi
""        → bo‘sh string

Bo‘sh string ichida hech qanday belgi yo‘q, uning uzunligi 0. Lekin u “string mavjud emas” degani emas. Bo‘sh quti bilan umuman quti yo‘qligi bir xil bo‘lmaganidek, bo‘sh string bilan qiymatning mavjud emasligi ham boshqa tushunchalar.

""        → string bor, lekin ichi bo‘sh
mavjud emas → string qiymati umuman berilmagan
" "       → bitta bo‘sh joy belgisidan iborat string

"" va " " ham bir xil emas. Ikkinchi string ko‘zga bo‘sh ko‘rinsa ham, uning ichida bitta space belgisi bor va uzunligi kamida 1.

String array bilan qanday bog‘langan?

Klassik modelda string belgilar arrayi sifatida qaraladi. Array sonlarni yoki boshqa qiymatlarni ketma-ket saqlasa, string belgilarni ketma-ket saqlaydi:

Array:   [12, 25, 7, 40]
String:  ['S', 'a', 'l', 'o', 'm']

Shu sababli arrayga tegishli ko‘plab tushunchalar stringda ham uchraydi:

  • belgilar tartib bilan joylashadi;
  • har bir joyning indexi bor;
  • stringning uzunligi mavjud;
  • string bo‘ylab boshidan oxirigacha yurish mumkin;
  • kerakli belgini qidirish mumkin;
  • ikkita ko‘rsatkich, sliding window va prefix kabi yondashuvlar string masalalarida ham ishlatiladi.

Lekin stringni shunchaki “character array” deb yodlab olish ham yetarli emas. Zamonaviy dasturlash tillari matnni turli encodinglarda saqlashi, o‘zgarmas obyekt sifatida boshqarishi yoki belgilarni bir necha xotira birligida ifodalashi mumkin. DSAda avval stringni tartibli ketma-ketlik sifatida tushunamiz, keyin uning encoding va xotiraga bog‘liq nozik tomonlarini hisobga olamiz.

Kompyuter harflarni qanday saqlaydi?

Kompyuter xotirasida aslida harf, emoji yoki tinish belgisi degan tushuncha yo‘q. Xotirada faqat bitlar, ya’ni 0 va 1lar saqlanadi. Demak, har bir belgiga sonli qiymat biriktirish va shu sonni bitlar orqali saqlash kerak.

Masalan, qandaydir kelishuvda quyidagicha moslik bo‘lishi mumkin:

A → 65
B → 66
C → 67

Belgilar va sonlar o‘rtasidagi bunday kelishuv character encoding deb ataladi. Matnni saqlayotgan dastur ham, uni o‘qiyotgan dastur ham bir xil encodingdan foydalansa, sonlar yana to‘g‘ri belgilarga aylantiriladi. Ular turli encoding ishlatsa, matn buzilgan belgilar ko‘rinishida chiqishi mumkin.

ASCII

ASCII dastlab ingliz alifbosi, raqamlar, tinish belgilari va boshqaruv belgilarini sonlar bilan bog‘lash uchun yaratilgan jadval. Masalan, katta A, kichik a va 0 raqami turli kodlarga ega.

ASCII quyidagi matnlar uchun yetarli:

  • inglizcha harflar;
  • 0 dan 9 gacha raqamlar;
  • nuqta, vergul, savol belgisi kabi tinish belgilari;
  • yangi qator va tab kabi boshqaruv belgilar.

Lekin dunyoda ingliz alifbosidan tashqari juda ko‘p yozuv tizimlari mavjud. O‘zbek tilidagi o‘ yoki g‘ yozuvlari, arab, xitoy, kirill harflari va emojilarni faqat dastlabki ASCII jadvali bilan to‘liq ifodalab bo‘lmaydi. Shu ehtiyoj Unicode paydo bo‘lishiga olib kelgan.

Unicode

Unicode — dunyodagi turli yozuv tizimlari va belgilariga yagona kod nuqtasi berishga qaratilgan standart. Unicode belgining ma’nosini belgilaydi. Masalan, ma’lum kod nuqtasi lotincha harfga, boshqasi matematik belgiga, yana biri emojiga tegishli bo‘ladi.

Bu yerda ikkita tushunchani aralashtirmaslik kerak:

  • code point — Unicode ichidagi belgining sonli identifikatori;
  • encoding — shu son xotirada aynan qaysi baytlar orqali saqlanishi.

Unicode — belgilar uchun katta lug‘at, UTF-8 va UTF-16 esa shu lug‘atdagi raqamlarni xotiraga yozish usullari deb tasavvur qilish mumkin.

UTF-8 va o‘zgaruvchan uzunlik

UTF-8 internetda va ko‘plab zamonaviy tizimlarda keng ishlatiladigan encoding. Uning muhim xususiyati — barcha belgilar bir xil miqdordagi bayt egallamaydi:

  • oddiy ASCII belgisi odatda 1 bayt;
  • boshqa belgilar 2, 3 yoki 4 bayt egallashi mumkin.

Shuning uchun “string nechta belgidan iborat?” va “string xotirada nechta bayt egallaydi?” degan savollar har doim bir xil javobga ega emas.

Matn uzunligi  → foydalanuvchi ko‘radigan yoki dastur sanaydigan birliklar soni
Bayt uzunligi  → matnning encodingdan keyin xotirada egallagan joyi

Bu farq real tizimlarda muhim. Masalan:

  • ma’lumotlar bazasida maydon uchun joy ajratishda;
  • tarmoq orqali yuboriladigan xabar hajmini hisoblashda;
  • fayl hajmini aniqlashda;
  • matnni ma’lum bayt chegarasida kesishda;
  • foydalanuvchi nomiga uzunlik cheklovi qo‘yishda.

Matnni baytning o‘rtasidan kesish ko‘p baytli belgini buzib qo‘yishi mumkin. Shu sababli string bilan ishlaganda qaysi birlik sanalayotganini aniq bilish kerak.

“Bitta belgi” har doim bitta birlik emas

Foydalanuvchi ekranda bitta belgi ko‘radi, lekin u xotirada bir nechta code pointdan tashkil topishi mumkin. Masalan, ayrim urg‘uli harflar tayyor bitta code point sifatida yoki oddiy harf va unga qo‘shilgan alohida belgi sifatida yozilishi mumkin. Ba’zi emojilar ham bir nechta Unicode qismlarining birikmasidir.

Shu sababli quyidagi uchta miqdor farq qilishi mumkin:

  1. baytlar soni — xotirada nechta bayt ishlatilgani;
  2. code pointlar soni — nechta Unicode kodi borligi;
  3. foydalanuvchi ko‘radigan belgilar soni — ekranda nechta yaxlit belgi ko‘rinishi.

Oddiy algoritm masalalarida ko‘pincha har bir belgi bitta birlik deb olinadi. Real dasturda esa ism, emoji, xalqaro matn yoki foydalanuvchi kiritgan qiymat bilan ishlaganda bu soddalashtirish har doim to‘g‘ri emas.

Note

DSA masalasini yechishdan oldin “character” deganda masala ASCII belgisini, Unicode code pointni yoki foydalanuvchi ko‘radigan yaxlit belgini nazarda tutayotganini aniqlash kerak.

String xotirada qanday saqlanadi?

Stringni saqlashning bitta universal usuli yo‘q. Dasturlash tili yoki tizim uning tugash joyi va uzunligini turli usulda aniqlashi mumkin.

Uzunligi alohida saqlanadigan string

String obyektining yonida uning uzunligi ham saqlanishi mumkin:

length = 5
data   = [S][a][l][o][m]

Bunday modelda uzunlikni bilish uchun barcha belgilarni sanash shart emas. Tizim oldindan saqlangan length qiymatini oladi.

Maxsus yakunlovchi belgi bilan tugaydigan string

Ayrim past darajali modellarda string oxiriga matn tugaganini bildiruvchi maxsus qiymat qo‘yiladi:

[S][a][l][o][m][\0]

Bu maxsus qiymat ko‘pincha null terminator deb ataladi. U foydalanuvchi matnining qismi emas, stringning tugash joyini tizimga bildirish uchun xizmat qiladi. Bunday modelda string uzunligini bilish uchun boshlanishidan terminator uchraguncha yurish talab qilinishi mumkin.

Ikkala ma’lumotni saqlaydigan model

Ba’zi tizimlar uzunlikni ham saqlaydi, xotira xavfsizligi yoki boshqa sabablar uchun yakunlovchi qiymatdan ham foydalanishi mumkin. Muhimi, stringning qanday yozilishi emas, uning chegarasi tizim tomonidan qayerdan bilinishi haqidagi g‘oyani tushunishdir.

Mutable va immutable string

Stringlar o‘zgarish imkoniyatiga qarab ikki asosiy modelga bo‘linadi.

Mutable string

Mutable string yaratilgandan keyin uning ichidagi belgilarni o‘zgartirish mumkin:

Oldin:  "salom"
Keyin:  "Salom"

Agar xotira modeli ruxsat bersa, faqat birinchi katakdagi s belgisi S bilan almashtiriladi. Bunday yondashuv matn ustida juda ko‘p o‘zgarish bajarilganda foydali bo‘lishi mumkin.

Mutable matn real holatlarda quyidagi vazifalarga mos keladi:

  • katta matn muharririda matnni tahrirlash;
  • belgilarni joyida almashtirish;
  • matn buferini bosqichma-bosqich to‘ldirish;
  • juda ko‘p bo‘lakni birlashtirib yakuniy matn yaratish.

Immutable string

Immutable string yaratilgandan keyin uning ichki qiymatini o‘zgartirib bo‘lmaydi. “O‘zgartirish” amali bajarilganda asl string o‘z joyida qoladi va natija uchun yangi string yaratiladi:

asl     = "salom"
yangi   = "Salom"

Bu modelning bir nechta foydasi bor:

  • bitta stringni dasturning turli qismlari xavfsiz ulashishi mumkin;
  • bir joydagi o‘zgarish boshqa joydagi qiymatni tasodifan buzmaydi;
  • stringdan hash key sifatida foydalanish ishonchli bo‘ladi;
  • parallel ishlayotgan qismlar orasida boshqarish osonlashadi.

Kamchiligi — ko‘p marta o‘zgartirish yangi stringlar va nusxalashlar hosil qilishi mumkin. Shu sababli immutable string ishlatadigan tizimlarda ko‘plab matn bo‘laklarini yig‘ish uchun alohida mutable buffer yoki string builderga o‘xshash tuzilma beriladi.

Qaysi dasturlash tili qaysi modeldan foydalanishini yodlashdan oldin asosiy farqni tushunish kerak: amal mavjud xotirani o‘zgartiryaptimi yoki yangi qiymat yaratyaptimi?

Stringning asosiy xususiyatlari

Belgilar tartibi muhim

String tartibli ketma-ketlik. Bir xil belgilar boshqa tartibda joylashsa, boshqa matn hosil bo‘ladi:

"olma" ≠ "mola"

Ikkala stringda ham bir xil harflar bor, lekin ularning joylashuvi va ma’nosi boshqa.

Takroriy belgilar bo‘lishi mumkin

String ichida bitta belgi bir necha marta qatnashishi mumkin:

"alla"

Bu yerda a ham, l ham takrorlangan. Qiymat bir xil bo‘lsa ham, ularning indexlari boshqa-boshqa.

Katta-kichik harflar farqlanishi mumkin

Kompyuter uchun A va a odatda turli kodlarga ega:

"Salom" ≠ "salom"

Lekin real tizimda solishtirish qoidasi vazifaga bog‘liq. Parolda katta-kichik harf farqlanishi kerak. Qidiruv tizimida esa foydalanuvchi Toshkent yoki toshkent deb yozganida bir xil natijani kutishi mumkin.

Bo‘sh joy ham belgi

Space, tab va yangi qator ko‘zga harf kabi ko‘rinmasa ham, stringning haqiqiy qismlari hisoblanadi:

"salom dunyo"  → ikki so‘z orasida bo‘sh joy bor
"salom\ndunyo" → ikki qator orasida yangi qator belgisi bor

Shu sababli "salom", " salom" va "salom " uch xil string hisoblanadi.

Stringning chegarasi bor

Array kabi string indexlarining ham chegarasi mavjud. Oddiy n uzunlikdagi modelda birinchi index 0, oxirgi index n - 1. Chegaradan tashqaridagi joyga murojaat qilish noto‘g‘ri.

Substring mavjud

Stringning ichidan olingan uzluksiz bo‘lak substring deb ataladi:

Asl string:  "dasturlash"
Substring:   "dastur"
Substring:   "lash"
Substring:   "tur"

Belgilarni tashlab ketmasdan, ketma-ket olingan bo‘lak substring hisoblanadi. Masalan, "dsl" belgilarining tartibi asl stringda uchrashi mumkin, lekin ular yonma-yon turmagani uchun substring emas.

Substring tushunchasi qidiruv, matnni bo‘laklash, parser, log tahlili va bioinformatikada juda ko‘p ishlatiladi.

String turlari va real qo‘llanishlari

Stringni faqat mutable va immutable turga ajratish yetarli emas. Real tizimda uning vazifasi va ichidagi ma’lumot shakli ham qanday ishlov berishni belgilaydi.

Oddiy matn

Inson o‘qishi uchun yozilgan ism, maqola, izoh yoki xabar oddiy matn hisoblanadi:

"Bugun havo juda yaxshi."

U quyidagi joylarda ishlatiladi:

  • messenjer xabarlari;
  • blog va yangilik matnlari;
  • foydalanuvchi ismi va manzili;
  • dastur interfeysidagi yozuvlar;
  • elektron pochta mazmuni.

Bunday matnda Unicode, turli tillar, emoji, yangi qator va ortiqcha bo‘sh joylarni to‘g‘ri boshqarish muhim.

Identifikator string

Ba’zi stringlar inson o‘qishi mumkin bo‘lsa ham, ularning vazifasi matn emas, obyektni aniq tanishdir:

"user_847291"
"order-2026-00045"

Foydalanuvchi IDsi, buyurtma raqami, qurilma kodi va token shunday stringlarga misol bo‘ladi. Ularni oddiy gap kabi o‘zgartirish, katta-kichik harfini almashtirish yoki bo‘sh joylarini ixtiyoriy tozalash mumkin emas. Bitta belgi o‘zgarsa boshqa obyekt nazarda tutilishi mumkin.

Strukturali string

Ba’zi stringlar ichida ma’lum format bo‘yicha bir nechta qism saqlanadi:

"2026-07-11"
"[email protected]"
"https://example.com/products?id=42"

Sana, email, URL, IP manzil va fayl yo‘li tashqaridan oddiy string, lekin ichki grammatikaga ega. Masalan, emailda @ belgisi qismlarni ajratadi, URLda protokol, host, path va query mavjud.

Bunday stringlar bilan ishlaganda uni faqat belgilar ketma-ketligi deb emas, qoidalarga ega tuzilma deb ko‘rish kerak. Uni tekshirish va qismlarga ajratish uchun parser yoki maxsus validator ishlatiladi.

Machine-readable matn

JSON, XML, CSV yoki konfiguratsiya matni inson tomonidan o‘qilishi mumkin, lekin asosiy maqsadi dasturlar orasida ma’lumot tashishdir:

{"name":"Farrux","age":25}

Tarmoqdan kelgan JSON dastlab baytlar yoki string ko‘rinishida bo‘ladi. Keyin parser uni obyektlar, sonlar va arraylarga aylantiradi. Undagi qo‘shtirnoq, vergul va qavslar bezak emas, format grammatikasining bir qismi.

Log va oqim matni

Serverlar ishlashi davomida hodisalarni ketma-ket matn qatorlari ko‘rinishida yozadi:

2026-07-11 10:15:02 INFO user login succeeded

Log tahlilida string ichidan vaqt, daraja, foydalanuvchi yoki xato kodini qidirish kerak bo‘ladi. Real log fayli juda katta bo‘lishi mumkin, shu sababli butun matnni xotiraga yuklash o‘rniga uni qator yoki bo‘laklar bo‘yicha o‘qish ma’qul.

Maxfiy ma’lumot saqlovchi string

Parol, access token va maxfiy kalit ham ko‘pincha dasturga string sifatida keladi. Lekin ular bilan oddiy matndek ishlash xavfli:

  • logga chiqarish mumkin emas;
  • keraksiz nusxalarini yaratmaslik kerak;
  • parolni ochiq holda doimiy saqlamaslik kerak;
  • solishtirishda xavfsizlik talablarini hisobga olish kerak.

Demak, ma’lumotning texnik turi string bo‘lishi uning ishlatilish qoidalari ham oddiy matn bilan bir xil degani emas. String nimani ifodalayotgani ham muhim.

Stringlar qayerlarda ishlaydi?

Qidiruv tizimida

Foydalanuvchi kiritgan so‘rov string sifatida olinadi. Tizim katta-kichik harflarni bir xil ko‘rinishga keltirishi, ortiqcha bo‘sh joylarni olib tashlashi va matnni so‘zlarga bo‘lishi mumkin. Keyin shu so‘zlar indeksdan qidiriladi.

Bu yerda stringning ortida normalization, substring qidiruvi, tokenization va solishtirish algoritmlari ishlaydi.

Matn muharririda

Oddiy kichik string uchun belgilar arrayi yetarli bo‘lishi mumkin. Lekin millionlab belgili faylning o‘rtasiga har safar yangi belgi qo‘shilganda qolgan barcha belgilarni siljitish qimmat. Shu sababli katta matn muharrirlari oddiy stringdan tashqari rope, gap buffer yoki bo‘laklarga ajratilgan boshqa tuzilmalardan foydalanishi mumkin.

Foydalanuvchi ekranda bitta matn ko‘radi, lekin uning orqasida tahrirlashga mos murakkab tuzilma ishlashi mumkin.

URL va HTTP so‘rovda

Brauzerga kiritilgan URL string, lekin u bir nechta ma’noli qismdan iborat:

https://example.com/products/42?color=black

Bu yerda https — protokol, example.com — host, /products/42 — path, color=black esa query qismi. Server stringni parser orqali qismlarga ajratib, qaysi amal bajarilishini aniqlaydi.

Kompilyator va interpretatorda

Dastur kodi ham dastlab uzun string yoki belgilar oqimidir. Lexer uni kalit so‘zlar, identifikatorlar, sonlar va operatorlarga ajratadi. Parser esa shu bo‘laklardan dastur tuzilmasini hosil qiladi.

Demak, biz yozgan kodni tushunish jarayonining eng boshida ham string ustidagi algoritmlar turadi.

Biologik ketma-ketliklarda

DNK ma’lumotini A, C, G, T belgilaridan tuzilgan juda uzun string sifatida ifodalash mumkin:

"ACGTGCAATG..."

Bioinformatikada ma’lum bo‘lakni qidirish, ikki ketma-ketlikni solishtirish va takrorlanuvchi qismlarni topish string algoritmlariga borib taqaladi.

String ustidagi asosiy amallar

String bilan ishlashda odatda quyidagi amallar bajariladi:

  • uzunligini aniqlash;
  • index orqali belgini olish;
  • boshidan oxirigacha yurish;
  • ikkita stringni solishtirish;
  • substring olish;
  • belgi yoki substring qidirish;
  • stringlarni birlashtirish;
  • qismlarga bo‘lish;
  • belgilarni almashtirish;
  • katta-kichik harflarni o‘zgartirish;
  • bosh va oxiridagi ortiqcha bo‘sh joylarni tozalash.

Bu amallarning narxi stringning ichki modeliga bog‘liq. Masalan, uzunlik alohida saqlansa uni olish O(1) bo‘lishi mumkin. Null terminatorgacha sanash talab qilinsa O(n) vaqt ketadi. Immutable stringga yangi belgi qo‘shish esa yangi xotira ajratish va eski belgilarni nusxalashni talab qilishi mumkin.

Shu sababli “bu amal doim O(1)” yoki “string har doim array kabi ishlaydi” deyishdan oldin qanday model nazarda tutilganini aniqlash kerak.

Stringlarni solishtirish

Ikki string tengligini aniqlash uchun ularning belgilarini solishtirish kerak:

"kitob" = "kitob"
"kitob" ≠ "maktab"

Xotiradagi ikki string obyektining manzili boshqa bo‘lishi mumkin, lekin ichidagi matn bir xil bo‘lishi mumkin. Shu sababli obyekt aynan bir xilmi? va matn qiymati tengmi? degan savollarni aralashtirmaslik kerak.

Lug‘aviy tartibda solishtirishda belgilar chapdan o‘ngga tekshiriladi. Birinchi farqli belgi qaysi string oldin kelishini belgilaydi. Lekin real inson tilidagi tartib oddiy sonli kodlar tartibidan murakkabroq bo‘lishi mumkin. Katta-kichik harflar, urg‘ular va tilga xos harflar uchun maxsus collation qoidalari talab qilinadi.

Masalan, foydalanuvchi ismlarini saralash va dastur ichidagi identifikatorlarni saralash bir xil qoida bilan bajarilmasligi mumkin.

String normalization nima uchun kerak?

Tashqaridan bir xil ko‘rinadigan ikkita Unicode matn xotirada turli code pointlar ketma-ketligi orqali ifodalanishi mumkin. To‘g‘ridan-to‘g‘ri solishtirilganda ular teng emas deb chiqishi ehtimoli bor. Matnni oldindan kelishilgan standart ko‘rinishga keltirish normalization deb ataladi.

Normalization quyidagi vazifalarda muhim:

  • foydalanuvchi ismlarini solishtirish;
  • qidiruv so‘rovlarini qayta ishlash;
  • takroriy qiymatlarni aniqlash;
  • xalqaro matnni ma’lumotlar bazasida saqlash;
  • xavfsizlik tekshiruvlari.

Lekin barcha vaziyatda stringni kichik harfga o‘tkazish yoki belgilarni olib tashlash to‘g‘ri emas. Parol, kriptografik token va case-sensitive identifikatorlarda bitta belgi farqi ham ma’noni o‘zgartiradi. Normalization ma’lumot nimani ifodalayotganiga qarab qo‘llanadi.

Stringning afzalliklari

  • Inson o‘qiydigan ma’lumotni tabiiy ko‘rinishda ifodalaydi.
  • Belgilar tartibi saqlanadi.
  • Index, traversal va ko‘plab array algoritmlaridan foydalanish mumkin.
  • Fayl, tarmoq va foydalanuvchi kiritishi bilan ishlash uchun universal ko‘rinish beradi.
  • Oddiy matndan tortib strukturali formatlargacha turli ma’lumotni ifodalay oladi.

Stringning cheklovlari

  • Unicode sabab “bitta belgi” tushunchasi murakkab bo‘lishi mumkin.
  • Immutable modelda ko‘p marta birlashtirish va o‘zgartirish ortiqcha nusxalar yaratadi.
  • String ichidan qiymat qidirish katta matnda qimmatga tushishi mumkin.
  • Strukturali ma’lumotni oddiy string sifatida boshqarish xatolarga olib keladi.
  • Turli encodinglar noto‘g‘ri aralashsa matn buziladi.
  • Katta matnni to‘liq xotiraga yuklash ko‘p resurs talab qiladi.

Stringning qulayligi ba’zan noto‘g‘ri tanlovga ham sabab bo‘ladi. Masalan, sana string sifatida kelishi mumkin, lekin hisob-kitob qilishdan oldin uni sana tuzilmasiga aylantirish kerak. "100" ko‘rinishidagi qiymat matn; uni matematik qo‘shishda ishlatish uchun avval songa aylantirish talab qilinadi.

Demak, ma’lumotni qabul qilish formati string bo‘lishi uning dastur ichidagi eng to‘g‘ri turi ham string degani emas.

String bilan ishlashdagi keng tarqalgan chalkashliklar

String uzunligini baytlar soni deb hisoblash

ASCII matnda bu tasodifan to‘g‘ri chiqishi mumkin. Unicode matnda esa bitta belgi bir nechta bayt egallashi mumkin. Cheklov qo‘yishda belgi, code point yoki bayt sanalayotgani aniq bo‘lishi kerak.

Bo‘sh string va bo‘sh joyni bir xil deb o‘ylash

"" uzunligi nol, " " esa kamida bitta belgiga ega. Foydalanuvchi faqat bo‘sh joylar yuborganini aniqlash uchun oddiy “string bo‘shmi?” tekshiruvi yetmasligi mumkin.

String va sonni aralashtirish

"10" + "5" → matnlarni birlashtirish natijasi "105" bo‘lishi mumkin
10 + 5     → sonlarni qo‘shish natijasi 15

Tashqi ko‘rinishi raqam bo‘lsa ham, qo‘shtirnoq ichidagi qiymat string bo‘lib qoladi.

Har bir index bitta ko‘rinadigan belgini beradi deb o‘ylash

Bu encoding va dasturlash tilining string modeliga bog‘liq. Ayrim tizimda index baytni, ayrimida code unitni, ayrimida code pointga yaqin birlikni bildirishi mumkin.

Ko‘p marta + orqali string yig‘ish

Immutable stringda har bir birlashtirish yangi string yaratishi va oldingi matnni nusxalashi mumkin. Juda ko‘p bo‘lak bilan ishlaganda maxsus buffer yoki builder samaraliroq bo‘ladi.

Maxfiy stringni logga chiqarish

Debug qilish uchun butun request yoki obyektni chiqarish ichidagi parol va tokenlarning logda qolishiga sabab bo‘lishi mumkin. String oddiy ko‘rinsa ham, uning ma’nosi xavfsizlik talabini belgilaydi.

String haqidagi eng muhim xulosa

Stringni faqat qo‘shtirnoq ichidagi matn deb eslab qolish yetarli emas. Uning asosiy modeli quyidagicha:

  1. string — belgilar yoki matn birliklarining tartibli ketma-ketligi;
  2. klassik ko‘rinishda u character arrayga o‘xshaydi;
  3. kompyuter belgilarni sonlar va bitlar orqali saqlaydi;
  4. Unicode belgining kodini, UTF-8 kabi encoding esa uning baytlarda yozilishini belgilaydi;
  5. baytlar soni, code pointlar soni va foydalanuvchi ko‘radigan belgilar soni farq qilishi mumkin;
  6. mutable string o‘z joyida o‘zgarishi, immutable string esa amal natijasida yangi qiymat yaratishi mumkin;
  7. stringning ichki modeli uning amallari vaqt va xotira murakkabligiga ta’sir qiladi;
  8. string qanday ma’lumotni ifodalayotgani unga qanday ishlov berish kerakligini belgilaydi.

String bilan bog‘liq masalada birinchi savol “buni qaysi tilda qanday yozaman?” emas. Avval matn qaysi birliklardan iboratligi, qaysi encodingda kelgani, o‘zgarishi mumkinligi va undan qaysi amallar talab qilinishini aniqlash kerak. Shu modelni tushungan odam string algoritmlarini istalgan dasturlash tilida qo‘llay oladi.

Keyingi qismda string ustidagi asosiy algoritmlarni — traversal, teskari aylantirish, palindrome tekshirish, substring qidirish, belgilar chastotasi, anagram, two pointers va sliding windowni — vaqt hamda xotira murakkabligi bilan birga ko‘rib chiqamiz.