Sebagian besar pengolahan teks sehari-hari tidak serumit regex: mencari kata di dalam kalimat, membersihkan spasi berlebih dari input pengguna, memecah nama lengkap, atau menyusun ulang potongan teks. Package strings dari standard library menyediakan seluruh peralatan tersebut sebagai fungsi siap pakai yang bekerja benar pada teks UTF-8. Pada chapter ini kita akan berlatih dengan data Indonesia — nama "Budi Santoso" dan kalimat "belajar go itu menyenangkan" — dari pencarian paling sederhana hingga pipeline pemotongan dan penggabungan.

Mencari Teks di dalam String #

Tiga pertanyaan paling awal tentang sebuah string: apakah memuat teks tertentu, apakah diawali atau diakhiri teks tertentu, dan di posisi mana teks itu berada. Fungsi Contains, HasPrefix, HasSuffix, dan Index menjawabnya sekaligus:

go
nama := "Budi Santoso"
fmt.Println(strings.Contains(nama, "Sant"), strings.Index(nama, "Sant"))

Output yang Dihasilkan:

text
true 5

Pemanggilan strings.Contains(nama, "Sant") memeriksa keberadaan substring Sant di dalam nama, sedangkan strings.Index(nama, "Sant") mengembalikan posisi byte pertama kemunculannya — angka 5 karena substring tersebut dimulai setelah Budi dan satu spasi. Bila substring tidak ditemukan, strings.Index mengembalikan -1; saudaranya strings.LastIndex mencari dari arah belakang. Ketiga fungsi ini tidak peduli huruf besar-kecil — untuk perbandingan abaik-huruf, gunakan strings.EqualFold.

Membersihkan dan Mengubah Huruf #

Input dari pengguna hampir selalu datang kotor: spasi di depan-belakang, tab, baris baru. strings.TrimSpace memangkas seluruh whitespace Unicode di kedua tepi string, sedangkan strings.Trim memangkas himpunan karakter yang kita tentukan sendiri:

go
fmt.Printf("[%s]\n", strings.TrimSpace("  \tbelajar go\n"))

Output yang Dihasilkan:

text
[belajar go]

Keluarga Trim punya varian searah: TrimPrefix dan TrimSuffix hanya memangkas satu awalan atau akhiran pasti, cocok untuk membersihkan label seperti data_2026.txt menjadi 2026.txt. Fungsi ToUpper dan ToLower mengubah huruf dengan sadar-Unicode: huruf é berubah menjadi É, bukan terabaikan. Untuk perbandingan dua string tanpa memedulikan huruf besar-kecil, strings.EqualFold("GO", "gO") bernilai true tanpa perlu mengubah keduanya lebih dulu.

Memotong, Menggabung, dan Mengganti #

strings.Split memecah string menjadi []string berdasarkan pemisah, lalu strings.Join menyusunnya kembali dengan pemisah baru — pasangan ini adalah tulang punggung pemrosesan teks terformat:

go
bagian := strings.Split("Budi Santoso", " ")
fmt.Println(bagian, strings.Join(bagian, "-"))

Output yang Dihasilkan:

text
[Budi Santoso] Budi-Santoso

Penggantian teks memakai strings.Replace dengan jumlah yang ditentukan, atau strings.ReplaceAll untuk seluruh kemunculan:

go
fmt.Println(strings.Replace("a-b-a-b", "a", "x", 1))
fmt.Println(strings.ReplaceAll("a-b-a-b", "a", "x"))

Output yang Dihasilkan:

text
x-b-a-b
x-b-x-b

Argumen 1 pada pemanggilan pertama membatasi penggantian hanya pada kemunculan pertama a. Fungsi pendukung lain: strings.Repeat menggandakan teks, strings.Count menghitung kemunculan substring, dan strings.Fields memotong berdasarkan whitespace bertumpuk.

Tabel Ringkas #

FungsiTugasContoh
Contains(s, sub)cek keberadaan substringContains("Budi Santoso", "Sant") → true
HasPrefix / HasSuffixcek awalan / akhiranHasPrefix(nama, "Budi") → true
Index(s, sub)posisi byte substringIndex(nama, "Santoso") → 5
ToUpper / ToLowerubah kapitalisasiToUpper("café") → "CAFÉ"
TrimSpace / Trimpangkas tepiTrimSpace(" go ") → "go"
TrimPrefix / TrimSuffixpangkas awalan / akhiranTrimPrefix("data_1", "data_") → "1"
Split / Fieldspecah jadi sliceSplit(nama, " ") → [Budi Santoso]
Joingabung sliceJoin(bagian, ", ") → "Budi, Santoso"
Replace / ReplaceAllganti substringReplaceAll(kalimat, "go", "Go")
Repeat / Countgandakan / hitungRepeat("go-", 3) → "go-go-go-"
EqualFoldbandingkan abaik kapitalEqualFold("GO", "gO") → true

Program Utuh #

Berkas strings-demo.go merangkai seluruh fungsi di atas dalam satu program bertahap. Jalankan dari direktori chapter:

go
package main

import (
	"fmt"
	"strings"
)

func main() {
	nama := "Budi Santoso"
	kalimat := "belajar go itu menyenangkan"

	// Mencari dan memeriksa isi string.
	fmt.Println("Contains   :", strings.Contains(nama, "Sant"))
	fmt.Println("HasPrefix  :", strings.HasPrefix(nama, "Budi"))
	fmt.Println("HasSuffix  :", strings.HasSuffix(nama, "oso"))
	fmt.Println("Index      :", strings.Index(nama, "Santoso"))

	// Mengubah huruf dan memangkas tepi string.
	fmt.Println("ToUpper    :", strings.ToUpper(nama))
	fmt.Println("ToLower    :", strings.ToLower(nama))
	fmt.Printf("TrimSpace  : [%s]\n", strings.TrimSpace("  belajar go  "))

	// Memotong dan menggabung string.
	kata := strings.Fields(kalimat)
	fmt.Printf("Fields     : %v (%d kata)\n", kata, len(kata))
	bagian := strings.Split(nama, " ")
	fmt.Println("Split      :", bagian)
	fmt.Println("Join       :", strings.Join(bagian, ", "))

	// Mengganti, mengulang, menghitung, membandingkan.
	fmt.Println("ReplaceAll :", strings.ReplaceAll(kalimat, "go", "Go"))
	fmt.Println("Repeat     :", strings.Repeat("go-", 3))
	fmt.Println("Count      :", strings.Count(kalimat, "a"))
	fmt.Println("EqualFold  :", strings.EqualFold("GO", "gO"))

	// Memangkas awalan tetap dari nama berkas.
	berkas := "data_2026.txt"
	fmt.Println("TrimPrefix :", strings.TrimPrefix(berkas, "data_"))
}
bash
go run strings-demo.go

Output yang Dihasilkan:

text
Contains   : true
HasPrefix  : true
HasSuffix  : true
Index      : 5
ToUpper    : BUDI SANTOSO
ToLower    : budi santoso
TrimSpace  : [belajar go]
Fields     : [belajar go itu menyenangkan] (4 kata)
Split      : [Budi Santoso]
Join       : Budi, Santoso
ReplaceAll : belajar Go itu menyenangkan
Repeat     : go-go-go-
Count      : 4
EqualFold  : true
TrimPrefix : 2026.txt

Mari kita telaah baris demi baris program di atas:

  1. Baris 13-16 (blok pencarian): memeriksa substring, awalan, akhiran, dan posisi Santoso pada nama; keempatnya bekerja tanpa regex apa pun.
  2. Baris 19-21 (blok pembersihan): mengubah kapitalisasi nama dan memangkas spasi tepi; tanda kurung siku pada format [%s] membuat hasil pemangkasan terlihat jelas di output.
  3. Baris 24-28 (blok pemotongan): Fields memecah kalimat menjadi 4 kata dari whitespace bertumpuk, Split memecah nama menurut spasi tunggal, lalu Join menyusun ulang dengan pemisah koma.
  4. Baris 31-34 (blok penggantian): mengganti semua go menjadi Go, menggandakan go- tiga kali, menghitung 4 kemunculan huruf a, dan membuktikan EqualFold mengabaikan kapitalisasi.
  5. Baris 37-38 (TrimPrefix): membuang awalan data_ dari nama berkas sehingga tersisa 2026.txt — pola umum saat memproses daftar berkas.

Dengan peralatan strings, teks biasa sudah tertangani. Tantangan berikutnya muncul saat angka berpindah bentuk: membaca "2026" dari berkas konfigurasi atau menulis angka ke laporan — tugas yang dikerjakan package strconv pada chapter Package strconv .

Referensi #

Berkas Sumber

Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.

strings-demo.go

Unduh berkas
go
package main

import (
	"fmt"
	"strings"
)

func main() {
	nama := "Budi Santoso"
	kalimat := "belajar go itu menyenangkan"

	// Mencari dan memeriksa isi string.
	fmt.Println("Contains   :", strings.Contains(nama, "Sant"))
	fmt.Println("HasPrefix  :", strings.HasPrefix(nama, "Budi"))
	fmt.Println("HasSuffix  :", strings.HasSuffix(nama, "oso"))
	fmt.Println("Index      :", strings.Index(nama, "Santoso"))

	// Mengubah huruf dan memangkas tepi string.
	fmt.Println("ToUpper    :", strings.ToUpper(nama))
	fmt.Println("ToLower    :", strings.ToLower(nama))
	fmt.Printf("TrimSpace  : [%s]\n", strings.TrimSpace("  belajar go  "))

	// Memotong dan menggabung string.
	kata := strings.Fields(kalimat)
	fmt.Printf("Fields     : %v (%d kata)\n", kata, len(kata))
	bagian := strings.Split(nama, " ")
	fmt.Println("Split      :", bagian)
	fmt.Println("Join       :", strings.Join(bagian, ", "))

	// Mengganti, mengulang, menghitung, membandingkan.
	fmt.Println("ReplaceAll :", strings.ReplaceAll(kalimat, "go", "Go"))
	fmt.Println("Repeat     :", strings.Repeat("go-", 3))
	fmt.Println("Count      :", strings.Count(kalimat, "a"))
	fmt.Println("EqualFold  :", strings.EqualFold("GO", "gO"))

	// Memangkas awalan tetap dari nama berkas.
	berkas := "data_2026.txt"
	fmt.Println("TrimPrefix :", strings.TrimPrefix(berkas, "data_"))
}