48 / 68

strings

strings paketi

strings — satrlar (string) ustida qidirish, ajratish, birlashtirish, almashtirish va tozalash kabi amallarni bajarish uchun mo'ljallangan eng ko'p ishlatiladigan standart paketlardan biridir.

Deyarli har qanday Go dasturi (foydalanuvchi kiritgan matnni tekshirish, faylni qatorlarga ajratish, URL yasash va h.k.) qandaydir darajada strings paketiga tayanadi.

example.go
import "strings"

1. Katta-kichik harflarga o'tkazish: ToUpper() va ToLower()

example.go
package main

import (
    "fmt"
    "strings"
)

func main() {
    s := "Salom, Go Dasturchi!"

    fmt.Println(strings.ToUpper(s)) // barcha harflarni katta qiladi
    fmt.Println(strings.ToLower(s)) // barcha harflarni kichik qiladi
}

Natija:

kod
SALOM, GO DASTURCHI!
salom, go dasturchi!

2. Qidirish: Contains(), HasPrefix(), HasSuffix(), Index()

Satr ichida boshqa bir qism-satr (substring) borligini yoki uning qayerda joylashganini tekshirish uchun quyidagi funksiyalar ishlatiladi:

example.go
package main

import (
    "fmt"
    "strings"
)

func main() {
    s := "Salom, Go Dasturchi!"

    fmt.Println(strings.Contains(s, "Go"))     // s ichida "Go" bormi?
    fmt.Println(strings.HasPrefix(s, "Salom")) // s "Salom" bilan boshlanadimi?
    fmt.Println(strings.HasSuffix(s, "!"))     // s "!" bilan tugaydimi?
    fmt.Println(strings.Index(s, "Go"))        // "Go" qaysi indeksdan boshlanadi?
    fmt.Println(strings.Count(s, "a"))         // nechta "a" harfi bor?
}

Natija:

kod
true
true
true
7
2

[!NOTE] Agar Index() qidirilayotgan qism-satrni topmasa, -1 qaytaradi. Shuning uchun natijani ishlatishdan oldin -1 ga tenglikni tekshirish tavsiya etiladi.


3. Almashtirish: Replace() va ReplaceAll()

example.go
package main

import (
    "fmt"
    "strings"
)

func main() {
    s := "Salom, Go Dasturchi!"

    // faqat birinchi "a" ni "@" ga almashtiradi (3-parametr — nechta marta)
    fmt.Println(strings.Replace(s, "a", "@", 1))

    // barcha "a" harflarini almashtiradi
    fmt.Println(strings.ReplaceAll(s, "a", "@"))
}

Natija:

kod
S@lom, Go Dasturchi!
S@lom, Go D@sturchi!

strings.ReplaceAll(s, old, new) aslida strings.Replace(s, old, new, -1) ga teng — ya'ni -1 "cheksiz marta almashtir" degani.


4. Ortiqcha bo'shliq va belgilarni tozalash: Trim*()

example.go
package main

import (
    "fmt"
    "strings"
)

func main() {
    // boshi va oxiridagi bo'sh joylarni olib tashlaydi
    fmt.Println(strings.TrimSpace("   bo'sh joylar   "))

    // boshi va oxiridan ko'rsatilgan belgilarni olib tashlaydi
    fmt.Println(strings.Trim("###salom###", "#"))

    // faqat berilgan prefiks/suffiks mavjud bo'lsa, uni olib tashlaydi
    fmt.Println(strings.TrimPrefix("go-dasturchi", "go-"))
    fmt.Println(strings.TrimSuffix("file.txt", ".txt"))
}

Natija:

kod
bo'sh joylar
salom
dasturchi
file

[!IMPORTANT] TrimPrefix()/TrimSuffix() ko'rsatilgan qism mos kelmasa, satrni o'zgarishsiz qaytaradi — xatolik bermaydi. Shuning uchun ularni "agar mavjud bo'lsa olib tashla" mantig'ida xavfsiz ishlatish mumkin.


5. Bo'lish va birlashtirish: Split(), Fields(), Join()

example.go
package main

import (
    "fmt"
    "strings"
)

func main() {
    // satrni ko'rsatilgan ajratuvchi bo'yicha bo'laklarga bo'ladi
    parts := strings.Split("olma,uzum,anor", ",")
    fmt.Println(parts)

    // aksincha: bo'laklarni ko'rsatilgan ajratuvchi bilan birlashtiradi
    joined := strings.Join(parts, " | ")
    fmt.Println(joined)

    // Fields — bo'sh joylar (bir nechta ketma-ket bo'lsa ham) bo'yicha bo'ladi
    fields := strings.Fields("  Go   juda   qiziq  ")
    fmt.Println(fields)
}

Natija:

kod
[olma uzum anor]
olma | uzum | anor
[Go juda qiziq]

[!NOTE] strings.Split(s, " ") bilan strings.Fields(s) orasidagi farqga e'tibor bering: Split bo'sh joy sonini aynan hisobga oladi (masalan, ikkita ketma-ket bo'sh joy — bo'sh elementga sabab bo'ladi), Fields esa ortiqcha bo'sh joylarni avtomatik e'tiborsiz qoldiradi.

Agar bo'laklar sonini cheklash kerak bo'lsa, SplitN() ishlatiladi:

example.go
fmt.Println(strings.SplitN("a,b,c,d", ",", 2)) // faqat 2 ta bo'lakka ajratadi

Natija:

kod
[a b,c,d]

6. Boshqa foydali funksiyalar: Repeat(), EqualFold(), LastIndex()

example.go
package main

import (
    "fmt"
    "strings"
)

func main() {
    // satrni ko'rsatilgan marta takrorlaydi
    fmt.Println(strings.Repeat("ab", 3))

    // katta-kichik harflarga qaramasdan tenglikni tekshiradi
    fmt.Println(strings.EqualFold("GoLang", "golang"))

    // qism-satrning OXIRGI uchrashgan joyini qaytaradi
    fmt.Println(strings.LastIndex("go go go", "go"))
}

Natija:

kod
ababab
true
6

7. Ko'p qismli satrni samarali yig'ish: strings.Builder

Agar sikl ichida ko'p marta satr qo'shish kerak bo'lsa (masalan, += orqali), bu har safar yangi xotira ajratishga olib keladi va sekinlashtiradi. Bunday holatlarda strings.Builder ishlatilishi tavsiya etiladi:

example.go
package main

import (
    "fmt"
    "strings"
)

func main() {
    var sb strings.Builder

    sb.WriteString("Salom")
    sb.WriteString(", ")
    sb.WriteString("Dunyo!")

    // yig'ilgan natijani bitta satr sifatida olamiz
    fmt.Println(sb.String())
}

Natija:

kod
Salom, Dunyo!

[!NOTE] strings.Builder ichki bufer ishlatgani uchun ko'p marta birlashtirishda oddiy s = s + "..." yozishdan sezilarli tezroq ishlaydi, chunki har bir qo'shishda butun satrni qaytadan nusxalamaydi.


8. Bir nechta almashtirishni bir vaqtda bajarish: strings.NewReplacer

Agar bir nechta juft-juft almashtirishni BIR YO'LA (bir marta satr bo'ylab yurib) bajarish kerak bo'lsa, strings.Replace()ni ketma-ket chaqirish o'rniga NewReplacer() qulayroq:

example.go
package main

import (
    "fmt"
    "strings"
)

func main() {
    r := strings.NewReplacer("Go", "GO", "Dasturchi", "DEV")

    fmt.Println(r.Replace("Go Dasturchi platformasi"))
}

Natija:

kod
GO DEV platformasi

Xulosa: qachon qaysi funksiya kerak?

VazifaFunksiya
Katta/kichik harfga o'tkazishstrings.ToUpper() / ToLower()
Qism-satr bor-yo'qligini tekshirishstrings.Contains()
Boshlanishi/tugashini tekshirishstrings.HasPrefix() / HasSuffix()
Bittasini yoki hammasini almashtirishstrings.Replace() / ReplaceAll()
Ortiqcha bo'shliq/belgilarni olib tashlashstrings.TrimSpace() / Trim()
Satrni bo'laklarga ajratishstrings.Split() / Fields()
Bo'laklarni birlashtirishstrings.Join()
Ko'p marta satr yig'ish (siklda)strings.Builder
Bir nechta almashtirishni birga bajarishstrings.NewReplacer()