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.
import "strings"
ToUpper() va ToLower()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:
SALOM, GO DASTURCHI!
salom, go dasturchi!
Contains(), HasPrefix(), HasSuffix(), Index()Satr ichida boshqa bir qism-satr (substring) borligini yoki uning qayerda joylashganini tekshirish uchun quyidagi funksiyalar ishlatiladi:
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:
true
true
true
7
2
[!NOTE] Agar
Index()qidirilayotgan qism-satrni topmasa,-1qaytaradi. Shuning uchun natijani ishlatishdan oldin-1ga tenglikni tekshirish tavsiya etiladi.
Replace() va ReplaceAll()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:
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.
Trim*()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:
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.
Split(), Fields(), Join()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:
[olma uzum anor]
olma | uzum | anor
[Go juda qiziq]
[!NOTE]
strings.Split(s, " ")bilanstrings.Fields(s)orasidagi farqga e'tibor bering:Splitbo'sh joy sonini aynan hisobga oladi (masalan, ikkita ketma-ket bo'sh joy — bo'sh elementga sabab bo'ladi),Fieldsesa ortiqcha bo'sh joylarni avtomatik e'tiborsiz qoldiradi.
Agar bo'laklar sonini cheklash kerak bo'lsa, SplitN() ishlatiladi:
fmt.Println(strings.SplitN("a,b,c,d", ",", 2)) // faqat 2 ta bo'lakka ajratadi
Natija:
[a b,c,d]
Repeat(), EqualFold(), LastIndex()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:
ababab
true
6
strings.BuilderAgar 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:
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:
Salom, Dunyo!
[!NOTE]
strings.Builderichki bufer ishlatgani uchun ko'p marta birlashtirishda oddiys = s + "..."yozishdan sezilarli tezroq ishlaydi, chunki har bir qo'shishda butun satrni qaytadan nusxalamaydi.
strings.NewReplacerAgar 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:
package main
import (
"fmt"
"strings"
)
func main() {
r := strings.NewReplacer("Go", "GO", "Dasturchi", "DEV")
fmt.Println(r.Replace("Go Dasturchi platformasi"))
}
Natija:
GO DEV platformasi
| Vazifa | Funksiya |
|---|---|
| Katta/kichik harfga o'tkazish | strings.ToUpper() / ToLower() |
| Qism-satr bor-yo'qligini tekshirish | strings.Contains() |
| Boshlanishi/tugashini tekshirish | strings.HasPrefix() / HasSuffix() |
| Bittasini yoki hammasini almashtirish | strings.Replace() / ReplaceAll() |
| Ortiqcha bo'shliq/belgilarni olib tashlash | strings.TrimSpace() / Trim() |
| Satrni bo'laklarga ajratish | strings.Split() / Fields() |
| Bo'laklarni birlashtirish | strings.Join() |
| Ko'p marta satr yig'ish (siklda) | strings.Builder |
| Bir nechta almashtirishni birga bajarish | strings.NewReplacer() |