5-bo‘lim

Satrlar bilan ishlash

String uzunligi, kesish, qidirish, almashtirish, Split va Join, interpolyatsiya formatlari va nega StringBuilder kerak.

🕑 13 daqiqa o‘qish 📄 583 so‘z 👁 0 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. Asosiy amallar
  2. Satr o'zgarmaydi
  3. Ortiqcha bo'shliqlarni olib tashlash
  4. Almashtirish va bo'lish
  5. Boshlanishi va oxirini tekshirish
  6. Interpolyatsiya va formatlar
  7. Ustunlarni tekislash
  8. Belgilar bo'ylab yurish
  9. StringBuilder - ko'p ulash uchun
  10. Foydali tekshiruvlar
  11. Xulosa

String - matn saqlaydigan tur. Visual Basic da u juda boy: o'nlab tayyor metodlar mavjud.

Asosiy amallar #

VB
Module Dastur
    Sub Main()
        Dim shahar As String = "Namangan"

        Console.WriteLine(shahar.Length)
        Console.WriteLine(shahar.ToUpper())
        Console.WriteLine(shahar.ToLower())
        Console.WriteLine(shahar.Substring(0, 4))
        Console.WriteLine(shahar.Contains("man"))
        Console.WriteLine(shahar.IndexOf("man"))
    End Sub
End Module
Natija
8
NAMANGAN
namangan
Nama
True
2
MetodNima qiladi
LengthBelgilar soni
ToUpper / ToLowerKatta / kichik harf
Substring(boshi, uzunlik)Bo'lakni kesib oladi
ContainsIchida bormi
IndexOfQayerdan boshlanadi (topilmasa -1)

Sanoq noldan boshlanadi: shahar.IndexOf("man") natijasi 2, chunki "man" uchinchi belgidan boshlanadi.

Satr o'zgarmaydi #

VB
Module Dastur
    Sub Main()
        Dim matn As String = "salom"
        matn.ToUpper()
        Console.WriteLine(matn)

        matn = matn.ToUpper()
        Console.WriteLine(matn)
    End Sub
End Module
Natija
salom
SALOM

Birinchi ToUpper() chaqiruvi hech narsani o'zgartirmadi.

String o'zgarmas (immutable)

String metodlari asl satrni hech qachon o'zgartirmaydi. Ular yangi satr qaytaradi.

Ya'ni matn.ToUpper() deb yozish - bekorga ish qilish. Natijani o'zlashtirish kerak: matn = matn.ToUpper().

Bu boshlovchilar eng ko'p qiladigan xatolardan biri va kompilyator bu haqda ogohlantirmaydi - chunki kod texnik jihatdan to'g'ri.

Ortiqcha bo'shliqlarni olib tashlash #

VB
Module Dastur
    Sub Main()
        Dim kirish As String = "   Husanboy   "

        Console.WriteLine("[" & kirish & "]")
        Console.WriteLine("[" & kirish.Trim() & "]")
        Console.WriteLine("[" & kirish.TrimStart() & "]")
        Console.WriteLine("[" & kirish.TrimEnd() & "]")
    End Sub
End Module
Natija
[   Husanboy   ]
[Husanboy]
[Husanboy   ]
[   Husanboy]

Foydalanuvchi kiritgan matnni doim Trim() qiling - tasodifiy bo'shliq keyinchalik topish qiyin xatolarga olib keladi.

Almashtirish va bo'lish #

VB
Module Dastur
    Sub Main()
        Dim jumla As String = "olma,anor,uzum,shaftoli"

        Dim mevalar() As String = jumla.Split(","c)
        Console.WriteLine(mevalar.Length)
        Console.WriteLine(mevalar(0))
        Console.WriteLine(mevalar(3))

        Console.WriteLine(String.Join(" | ", mevalar))
        Console.WriteLine(jumla.Replace(",", " va "))
    End Sub
End Module
Natija
4
olma
shaftoli
olma | anor | uzum | shaftoli
olma va anor va uzum va shaftoli

Split satrni massivga ajratadi, Join esa massivni qayta satrga yig'adi. Bu ikkisi juda ko'p ishlatiladi.

Boshlanishi va oxirini tekshirish #

VB
Module Dastur
    Sub Main()
        Dim fayl As String = "hisobot.pdf"

        Console.WriteLine(fayl.StartsWith("hisobot"))
        Console.WriteLine(fayl.EndsWith(".pdf"))
        Console.WriteLine(fayl.EndsWith(".PDF"))
        Console.WriteLine(fayl.EndsWith(".PDF",
                          StringComparison.OrdinalIgnoreCase))
    End Sub
End Module
Natija
True
True
False
True

Uchinchi natija False - chunki solishtirish katta-kichik harfni farqlaydi. Farqlamaslik kerak bo'lsa, StringComparison ni ko'rsating.

Interpolyatsiya va formatlar #

VB
Module Dastur
    Sub Main()
        Dim ism As String = "Aziza"
        Dim ball As Double = 87.5
        Dim narx As Decimal = 1250000D

        Console.WriteLine($"{ism} - {ball} ball")
        Console.WriteLine($"{ball:F1} ball")
        Console.WriteLine($"{narx:N0} so'm")
        Console.WriteLine($"{0.875:P0}")
    End Sub
End Module
Natija
Aziza - 87.5 ball
87.5 ball
1,250,000 so'm
88%
FormatMa'nosiNatija
F1Kasrdan keyin 1 xona87.5
N0Minglik ajratgich bilan1,250,000
P0Foiz ko'rinishida88%
D5Beshta xonaga to'ldirish00042
Ajratgich kompyuter sozlamasiga bog'liq

Yuqoridagi 1,250,000 da vergul ishlatilgan. Lekin bu tizim mintaqaviy sozlamasiga bog'liq: boshqa sozlamada u 1 250 000 yoki 1.250.000 bo'lib chiqishi mumkin.

Ya'ni bu misolni o'z kompyuteringizda ishga tushirsangiz, ajratgich boshqacha bo'lishi mumkin - bu xato emas.

Natija hamma joyda bir xil bo'lishi kerak bo'lsa (masalan fayl yoki tarmoq uchun), madaniyatni aniq ko'rsating:

VB
Imports System.Globalization

Console.WriteLine(narx.ToString("N0", CultureInfo.InvariantCulture))

Ekranga foydalanuvchi uchun chiqarayotgan bo'lsangiz, aksincha - tizim sozlamasi to'g'ri, chunki u odam kutgan ko'rinishni beradi.

Ustunlarni tekislash #

VB
Module Dastur
    Sub Main()
        Console.WriteLine("Olma".PadRight(12) & "12000")
        Console.WriteLine("Anor".PadRight(12) & "18000")
        Console.WriteLine("Shaftoli".PadRight(12) & "9500")
        Console.WriteLine(New String("-"c, 20))
        Console.WriteLine("42".PadLeft(6, "0"c))
    End Sub
End Module
Natija
Olma        12000
Anor        18000
Shaftoli    9500
--------------------
000042

New String("-"c, 20) - bir xil belgidan iborat satr yasaydi. Jadval chizishda qulay.

Belgilar bo'ylab yurish #

VB
Module Dastur
    Sub Main()
        Dim soz As String = "dastur"
        Dim teskari As String = ""

        For Each harf As Char In soz
            teskari = harf & teskari
        Next

        Console.WriteLine(teskari)
        Console.WriteLine(soz(0))
        Console.WriteLine(soz(soz.Length - 1))
    End Sub
End Module
Natija
rutsad
d
r

StringBuilder - ko'p ulash uchun #

Satr o'zgarmas bo'lgani uchun, har bir & amali yangi satr yaratadi. Bir-ikki marta bo'lsa muammo yo'q, minglab marta bo'lsa - sezilarli sekinlik.

VB
Imports System.Text

Module Dastur
    Sub Main()
        Dim quruvchi As New StringBuilder()

        For i As Integer = 1 To 5
            If i > 1 Then quruvchi.Append(" ")
            quruvchi.Append(i)
        Next

        quruvchi.AppendLine()
        quruvchi.Append("Tugadi")

        Console.WriteLine(quruvchi.ToString())
    End Sub
End Module
Natija
1 2 3 4 5
Tugadi
Qachon StringBuilder kerak

Oddiy qoida: agar ulash siklda bo'lsa - StringBuilder. Siklsiz bir necha ulash bo'lsa - oddiy & yoki interpolyatsiya o'qishga qulayroq.

Ming marta ulashda farq o'nlab marta bo'lishi mumkin, chunki StringBuilder bitta buferni kengaytirib boradi, & esa har safar yangi satr ko'chiradi.

Foydali tekshiruvlar #

VB
Module Dastur
    Sub Main()
        Dim bosh As String = ""
        Dim boshliq As String = "   "
        Dim toliq As String = "matn"

        Console.WriteLine(String.IsNullOrEmpty(bosh))
        Console.WriteLine(String.IsNullOrEmpty(boshliq))
        Console.WriteLine(String.IsNullOrWhiteSpace(boshliq))
        Console.WriteLine(String.IsNullOrWhiteSpace(toliq))
    End Sub
End Module
Natija
True
False
True
False

Farqi: IsNullOrEmpty faqat mutlaqo bo'sh satrni topadi, IsNullOrWhiteSpace esa faqat bo'shliqdan iborat satrni ham. Foydalanuvchi kiritgan ma'lumot uchun ikkinchisi to'g'riroq.

Amaliy topshiriq
  1. O'z ismingizni katta harflarda chiqaring.
  2. "Namangan".Substring(4) nima berishini taxmin qiling va tekshiring.
  3. matn.ToUpper() ni o'zlashtirmasdan yozing va natijani kuzating.
  4. Vergul bilan ajratilgan beshta ismni massivga bo'ling.
  5. O'sha massivni " - " bilan qayta birlashtiring.
  6. Fayl nomi .txt bilan tugashini katta-kichik harfga qaramay tekshiring.
  7. 1234567.891 sonini N2 formatida chiqaring.
  8. Uchta mahsulot nomi va narxini PadRight bilan ustun qilib chizing.
  9. Berilgan so'z palindrom ekanini tekshiring.
  10. StringBuilder bilan 1 dan 10 gacha sonlarni bitta qatorga yig'ing.

Xulosa #

  • String o'zgarmas: metodlar yangi satr qaytaradi, natijani o'zlashtirish kerak.
  • Sanoq noldan boshlanadi; IndexOf topilmasa -1 qaytaradi.
  • Foydalanuvchi kiritgan matnni doim Trim() qiling.
  • Split satrni massivga, Join massivni satrga aylantiradi.
  • Katta-kichik harfni farqlamaslik uchun StringComparison beriladi.
  • Interpolyatsiya formatlari: F1, N0, P0, D5.
  • Siklda ulash bo'lsa - StringBuilder.
  • Bo'sh kiritishni tekshirishda IsNullOrWhiteSpace ishonchliroq.

Keyingi bo'limda shart operatorlarini o'rganamiz.

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.