4-bo‘lim
Satrlar bilan ishlash
Satr o'zgarmasligi, interpolatsiya, xom satr literallari, qidirish va kesish, Split va Join, StringBuilder hamda solishtirish qoidalari.
Ushbu bo‘lim mundarijasi
Matn bilan ishlash dasturchining kundalik ishi. C# da satrlar kuchli va qulay, lekin bir nechta muhim xususiyati bor.
Satr o'zgarmas #
Bu eng muhim qoida: C# da satrni tahrirlab bo'lmaydi. Har bir amal yangi satr yaratadi.
string asl = "salom";
string katta = asl.ToUpper();
Console.WriteLine($"asl: {asl}");
Console.WriteLine($"katta: {katta}");
asl: salom
katta: SALOM
ToUpper() asl satrni o'zgartirmadi - u yangi satr qaytardi. Shu
sababli natijani o'zgaruvchiga saqlash kerak; aks holda u yo'qoladi.
string ism = " Husanboy ";
ism.Trim(); // natija tashlab yuborildi
Console.WriteLine($"[{ism}]");
ism = ism.Trim(); // to'g'ri
Console.WriteLine($"[{ism}]");
[ Husanboy ]
[Husanboy]
Birinchi Trim() chaqiruvi bekorga ketdi. Trim, Replace, ToUpper
va boshqa barcha satr metodlari yangi satr qaytaradi - ularni
o'zlashtirmasangiz, hech narsa o'zgarmaydi.
Satr interpolatsiyasi #
$ belgisi bilan boshlangan satr ichida {} qavslarda ifoda yozish
mumkin:
string ism = "Malika";
int yosh = 20;
Console.WriteLine($"{ism} - {yosh} yosh");
Console.WriteLine($"Kelasi yil: {yosh + 1}");
Console.WriteLine($"Bosh harf: {ism[0]}");
Console.WriteLine($"Katta harflar bilan: {ism.ToUpper()}");
Malika - 20 yosh
Kelasi yil: 21
Bosh harf: M
Katta harflar bilan: MALIKA
Qavs ichida istalgan ifoda bo'lishi mumkin: amal, metod chaqiruvi, hatto shart.
Formatlash #
using System.Globalization;
var inv = CultureInfo.InvariantCulture;
int son = 42;
double kasr = 3.14159;
Console.WriteLine($"{son,8}|");
Console.WriteLine($"{son,-8}|");
Console.WriteLine(string.Format(inv, "{0:F2}", kasr));
Console.WriteLine(string.Format(inv, "{0:P1}", 0.756));
Console.WriteLine($"{son:D5}");
42|
42 |
3.14
75.6 %
00042
| Belgi | Nima qiladi |
|---|---|
,8 | O'ngga tekislab, 8 belgi joy |
,-8 | Chapga tekislab |
:F2 | Kasrdan keyin 2 raqam |
:P1 | Foiz ko'rinishida (invariant madaniyat % oldiga bo'shliq qo'yadi) |
:D5 | Nollar bilan to'ldirib, 5 raqam |
string.Format ishlatildi?$"{kasr:F2}" yozsak ham ishlaydi, lekin natija joriy madaniyatga
bog'liq bo'ladi: rus tiliga sozlangan tizimda 3,14 chiqadi.
3-bo'limdagi qoidani eslang: natija bashorat qilinadigan bo'lishi
kerak bo'lsa, madaniyatni oshkora ko'rsating. string.Format birinchi
argument sifatida madaniyatni qabul qiladi.
Shu sababli bu darslikda kasr sonlar aynan shunday chiqariladi.
Xom satr literallari #
Uch qo'shtirnoq (""") ichida hech narsa maxsus emas - qochish
belgilari kerak emas:
string yol = """C:\Users\Husanboy\Hujjatlar""";
Console.WriteLine(yol);
string json = """
{
"ism": "Husanboy",
"shahar": "Namangan"
}
""";
Console.WriteLine(json);
C:\Users\Husanboy\Hujjatlar
{
"ism": "Husanboy",
"shahar": "Namangan"
}
Diqqat: yopuvchi """ qanchalik chekinsa, har bir qatordan shuncha
bo'shliq olib tashlanadi. Shuning uchun JSON chap chekkadan
boshlandi.
Uch holatda u ishni sezilarli osonlashtiradi:
- Fayl yo'llari -
"C:\Users\..."o'rniga; - JSON va XML - har bir qo'shtirnoqni qochirish shart emas;
- Ko'p qatorli matn -
\nyozmasdan.
Eski uslubda @ bilan ham yozish mumkin (@"C:\Users"), lekin unda
qo'shtirnoqni ikki marta yozish kerak. Xom satr qulayroq.
Asosiy metodlar #
string matn = "Namangan viloyati";
Console.WriteLine(matn.Length);
Console.WriteLine(matn.ToUpper());
Console.WriteLine(matn.Contains("viloyat"));
Console.WriteLine(matn.StartsWith("Naman"));
Console.WriteLine(matn.IndexOf("viloyat"));
Console.WriteLine(matn.Substring(0, 8));
Console.WriteLine(matn.Replace("viloyati", "shahri"));
17
NAMANGAN VILOYATI
True
True
9
Namangan
Namangan shahri
| Metod | Vazifasi |
|---|---|
Length | Belgilar soni |
ToUpper / ToLower | Katta / kichik harf |
Trim | Chetlardagi bo'shliqlarni olib tashlaydi |
Contains | Ichida bormi |
StartsWith / EndsWith | Boshlanadimi / tugaydimi |
IndexOf | O'rnini topadi, topilmasa -1 |
Substring | Bir qismini ajratib oladi |
Replace | Almashtiradi |
Split | Bo'laklarga ajratadi |
string.Join | Bo'laklarni birlashtiradi |
Split va Join #
string qator = "Namangan,Andijon,Samarqand,Toshkent";
string[] shaharlar = qator.Split(',');
Console.WriteLine($"Bo'laklar soni: {shaharlar.Length}");
foreach (string shahar in shaharlar)
{
Console.WriteLine($" - {shahar}");
}
Console.WriteLine(string.Join(" | ", shaharlar));
Bo'laklar soni: 4
- Namangan
- Andijon
- Samarqand
- Toshkent
Namangan | Andijon | Samarqand | Toshkent
Bo'sh bo'laklarni tashlab yuborish uchun:
string chalkash = "bir,,ikki, ,uch";
string[] hammasi = chalkash.Split(',');
string[] tozalangan = chalkash.Split(',',
StringSplitOptions.RemoveEmptyEntries
| StringSplitOptions.TrimEntries);
Console.WriteLine(
$"Oddiy: {hammasi.Length} ta -> [{string.Join("][", hammasi)}]");
Console.WriteLine(
$"Tozalangan: {tozalangan.Length} ta -> "
+ $"[{string.Join("][", tozalangan)}]");
Oddiy: 5 ta -> [bir][][ikki][ ][uch]
Tozalangan: 3 ta -> [bir][ikki][uch]
TrimEntries avval bo'shliqlarni qirqadi, keyin RemoveEmptyEntries
bo'sh qolganlarini tashlaydi - shuning uchun faqat bo'shliqdan iborat
bo'lak ham yo'qoldi.
Solishtirish #
Bu yerda ehtiyot bo'lish kerak:
string a = "salom";
string b = "SALOM";
Console.WriteLine(a == b);
Console.WriteLine(a.Equals(b, StringComparison.OrdinalIgnoreCase));
Console.WriteLine(string.Equals(a, b, StringComparison.Ordinal));
False
True
False
| Usul | Qachon |
|---|---|
== | Oddiy, aniq mos kelishi kerak bo'lganda |
StringComparison.Ordinal | Bayt bo'yicha - eng tez va bashoratli |
StringComparison.OrdinalIgnoreCase | Katta-kichik harfni e'tiborsiz |
StringComparison.CurrentCulture | Foydalanuvchiga ko'rsatiladigan saralash |
OrdinalFayl kengaytmasi, HTTP sarlavhasi, kalit so'z yoki ID ni
solishtirayotgan bo'lsangiz - Ordinal ishlating.
Madaniyatga bog'liq solishtirish ba'zi tillarda kutilmagan natija
beradi. Klassik misol - turk tilida I harfi kichik yozilganda
nuqtasiz ı ga aylanadi, shuning uchun "FILE".ToLower() == "file"
sharti turk tiliga sozlangan tizimda false bo'lib qoladi.
Bu haqiqiy dasturlarda uchragan va "turk I muammosi" degan nom olgan
xato. Ordinal undan butunlay xoli.
Bo'shliq tekshirish #
string bosh = "";
string faqatBoshliq = " ";
string matn = "salom";
Console.WriteLine($"IsNullOrEmpty: {string.IsNullOrEmpty(bosh)}, "
+ $"{string.IsNullOrEmpty(faqatBoshliq)}");
Console.WriteLine($"IsNullOrWhiteSpace: {string.IsNullOrWhiteSpace(bosh)}, "
+ $"{string.IsNullOrWhiteSpace(faqatBoshliq)}");
Console.WriteLine($"Matn uchun: {string.IsNullOrWhiteSpace(matn)}");
IsNullOrEmpty: True, False
IsNullOrWhiteSpace: True, True
Matn uchun: False
Foydalanuvchi kiritgan ma'lumotni tekshirishda deyarli har doim
IsNullOrWhiteSpace kerak: probel bosib yuborgan foydalanuvchi ham
hech narsa kiritmagan hisoblanadi.
StringBuilder - ko'p marta qo'shganda #
Satr o'zgarmas bo'lgani uchun, halqa ichida += qilish har safar yangi
satr yaratadi. Ko'p takrorlansa, bu sezilarli sekinlashtiradi.
using System.Text;
var quruvchi = new StringBuilder();
for (int i = 1; i <= 5; i++)
{
quruvchi.Append(i);
if (i < 5)
{
quruvchi.Append(" -> ");
}
}
Console.WriteLine(quruvchi.ToString());
Console.WriteLine($"Uzunligi: {quruvchi.Length}");
1 -> 2 -> 3 -> 4 -> 5
Uzunligi: 21
| Holat | Nima ishlatish |
|---|---|
| Bir nechta satrni qo'shish | Oddiy + yoki interpolatsiya |
| Halqa ichida, takror soni oz | += ham yetarli |
| Halqa ichida, yuzlab yoki minglab marta | StringBuilder |
| Ro'yxatni birlashtirish | string.Join - eng qulay |
Yodda tuting: uch-to'rt satrni qo'shish uchun StringBuilder
ishlatish kodni murakkablashtiradi, foyda bermaydi.
Belgilar bo'yicha yurish #
string soz = "Namangan";
int unliSoni = 0;
foreach (char belgi in soz)
{
if ("aeiouAEIOU".Contains(belgi))
{
unliSoni++;
}
}
Console.WriteLine($"'{soz}' so'zida {unliSoni} ta unli harf bor");
Console.WriteLine($"Teskarisi: {new string(soz.Reverse().ToArray())}");
'Namangan' so'zida 3 ta unli harf bor
Teskarisi: nagnamaN
- Satrning o'zgarmasligini
ToUppermisolida o'zingiz tekshiring. Trim()natijasini o'zlashtirmaslik xatosini takrorlab ko'ring.- Ismingiz va yoshingizni interpolatsiya bilan chiqaring.
- Bir sonni
F2,P1vaD5formatlarida chiqaring. - Xom satr literali bilan ko'p qatorli matn yozing.
- Vergul bilan ajratilgan ro'yxatni
Splitqilib, har birini chiqaring. RemoveEmptyEntriesbilan va usiz natijani solishtiring.- Ikki satrni
OrdinalvaOrdinalIgnoreCasebilan solishtiring. - "Turk I muammosi" nima ekanini o'z so'zingiz bilan yozing.
StringBuilderbilan 1 dan 10 gacha sonlarni bitta satrga yig'ing.
Xulosa #
- Satrlar o'zgarmas: har bir metod yangi satr qaytaradi, shuning uchun natijani o'zlashtiring.
$"..."interpolatsiyasi qavs ichida istalgan ifodani qabul qiladi.- Kasr sonni chiqarganda madaniyatni oshkora ko'rsating.
"""xom satr - fayl yo'llari, JSON va ko'p qatorli matn uchun.Split+RemoveEmptyEntries+TrimEntries- chalkash ma'lumotni tozalashning eng qisqa yo'li.- Texnik solishtirishda har doim
StringComparison.Ordinal- "turk I muammosi" shundan kelib chiqadi. - Foydalanuvchi kiritgan matnni
IsNullOrWhiteSpacebilan tekshiring. - Minglab marta qo'shish kerak bo'lsa -
StringBuilder.
Keyingi bo'limda shartlar va namuna moslashtirishni o'rganamiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.