Sehari-hari, kita jarang hanya menyimpan teks apa adanya — biasanya teks perlu dipotong, dibersihkan, dipisah, atau diubah besar/kecilnya. Kotlin menyediakan katalog method standar pada String yang mencakup hampir semua kebutuhan manipulasi teks umum. Pada chapter ini kita akan meninjau method yang paling sering dipakai: length, toUpperCase/toLowerCase, trim, substring, split, replace, startsWith, endsWith, contains, dan indexOf. Pemahaman rangkuman ini menjadi rujukan cepat sebelum kita masuk ke materi StringBuilder, multiline, dan regular expression.

Properti length dan Pemeriksaan Dasar #

Properti length mengembalikan jumlah karakter dalam string. Method isEmpty() mengembalikan true jika length == 0, dan isNotEmpty() merupakan kebalikannya. Properti indices menghasilkan IntRange dari 0 hingga length - 1 untuk iterasi aman.

kotlin Contoh: properti dasar
val teks = "Halo"
println(teks.length)      // 4
println(teks.isEmpty())    // false
println(teks.indices)      // 0..3

Mengubah Huruf Besar/Kecil dan Membersihkan Spasi #

Method uppercase() dan lowercase() mengembalikan string baru dengan huruf kapital atau kecil. Method trim() membuang karakter whitespace di awal dan akhir; varian trimStart() dan trimEnd() hanya membuang dari satu sisi.

kotlin Contoh: case dan trim
val s = "  Halo Dunia  "
println(s.uppercase())         // "  HALO DUNIA  "
println(s.trim())              // "Halo Dunia"
println(s.trimStart())         // "Halo Dunia  "

Perhatikan bahwa uppercase() dan lowercase() memakai aturan Unicode case mapping, sehingga karakter non-ASCII seperti "ß".uppercase() akan menghasilkan "SS" (dua karakter). Untuk pemetaan yang sensitif terhadap locale tertentu, gunakan overload yang menerima Locale.

substring, split, dan replace #

Method substring(startIndex) mengembalikan potongan dari indeks tertentu sampai akhir. Overload substring(startIndex, endIndex) mengambil potongan dari startIndex hingga endIndex - 1 (eksklusif). Method split(delimiter) memecah string menjadi List<String>, dan replace(old, new) mengganti semua kemunculan old dengan new.

kotlin Contoh: substring, split, replace
val csv = "Budi,Siti,Dewi"
val daftar = csv.split(",")
println(daftar)            // [Budi, Siti, Dewi]
println(csv.substring(5))  // Siti,Dewi
println(csv.replace(",", " | "))  // Budi | Siti | Dewi

Method replaceFirst(old, new) hanya mengganti kemunculan pertama, sedangkan replace(old, new) mengganti semua. Keduanya bersifat case-sensitive; gunakan overload dengan Regex untuk pencocokan pola.

Pencarian: startsWith, endsWith, contains, indexOf #

Empat method ini menjadi rujukan utama untuk pemeriksaan awalan, akhiran, keberadaan substring, dan posisi kemunculan pertama:

kotlin Contoh: pencarian substring
val kalimat = "Belajar Kotlin itu menyenangkan"
println(kalimat.startsWith("Belajar"))   // true
println(kalimat.endsWith("menyenangkan")) // true
println(kalimat.contains("Kotlin"))       // true
println(kalimat.indexOf("Kotlin"))        // 8
println(kalimat.indexOf("Python"))        // -1 (tidak ditemukan)

Method indexOf mengembalikan -1 bila substring tidak ditemukan. Overload indexOf(string, startIndex) memulai pencarian dari indeks tertentu, dan lastIndexOf(string) mencari dari akhir. Untuk pencarian pola kompleks (misalnya “angka empat digit”), gunakan Regex yang akan kita bahas tuntas pada chapter Regular Expressions.

Contoh Lengkap dan Outputnya #

File metode_string.kt berikut mendemonstrasikan seluruh method di atas:

kotlin
fun main() {
    val kalimat = "Belajar Kotlin itu Menyenangkan"

    println("length: ${kalimat.length}")
    println("uppercase: ${kalimat.uppercase()}")
    println("lowercase: ${kalimat.lowercase()}")
    println("trim: ${"   halo dunia   ".trim()}")
    println("substring(8,14): ${kalimat.substring(8, 14)}")

    val csv = "Budi,Siti,Dewi,Andi"
    val daftar = csv.split(",")
    println("split: $daftar")
    println("jumlah elemen: ${daftar.size}")

    println("replace: ${kalimat.replace("Menyenangkan", "Asyik")}")
    println("startsWith('Belajar'): ${kalimat.startsWith("Belajar")}")
    println("endsWith('!'): ${kalimat.endsWith("!")}")
    println("contains('Kotlin'): ${kalimat.contains("Kotlin")}")
    println("indexOf('Kotlin'): ${kalimat.indexOf("Kotlin")}")
    println("indexOf('Python'): ${kalimat.indexOf("Python")}")

    val teks = "Kotlin modern dan ringkas"
    println("substring dari indeks 7: ${teks.substring(7)}")
    println("replace (huruf): ${"kotlin".replace("k", "K")}")
    println("replace (kata): ${teks.replace("dan", "serta")}")

    val kalimatDua = "Halo Halo Halo"
    println("replace semua: ${kalimatDua.replace("Halo", "Hi")}")
    println("replaceFirst: ${kalimatDua.replaceFirst("Halo", "Hi")}")

    val kode = "KT-2026-001"
    println("startsWith(KT, prefix): ${kode.startsWith("KT")}")
    println("endsWith(001): ${kode.endsWith("001")}")
    println("contains(Regex): ${kode.contains(Regex("\\d{4}"))}")
}

Output yang Dihasilkan:

text
length: 31
uppercase: BELAJAR KOTLIN ITU MENYENANGKAN
lowercase: belajar kotlin itu menyenangkan
trim: halo dunia
substring(8,14): Kotlin
split: [Budi, Siti, Dewi, Andi]
jumlah elemen: 4
replace: Belajar Kotlin itu Asyik
startsWith('Belajar'): true
endsWith('!'): false
contains('Kotlin'): true
indexOf('Kotlin'): 8
indexOf('Python'): -1
substring dari indeks 7: modern dan ringkas
replace (huruf): Kotlin
replace (kata): Kotlin modern serta ringkas
replace semua: Hi Hi Hi
replaceFirst: Hi Halo Halo
startsWith(KT, prefix): true
endsWith(001): true
contains(Regex): true

Mari kita telaah bagian penting dari kode di atas. Baris kalimat.substring(8, 14) memotong karakter pada indeks 8 sampai 13 (eksklusif 14), menghasilkan "Kotlin". Pemanggilan csv.split(",") memecah string CSV menjadi List<String> dengan empat elemen. Baris kalimat.replace("Menyenangkan", "Asyik") membuat string baru karena String bersifat immutable. Perhatikan bahwa kalimat.endsWith("!") mengembalikan false karena kalimat tidak diakhiri tanda seru. Baris kode.contains(Regex("\\d{4}")) memperlihatkan bahwa contains juga bisa menerima Regex sebagai argumen — sebuah jembatan menuju chapter Regular Expressions.

Ringkasan Method yang Sering Dipakai #

MethodTipe KembalianCatatan
lengthIntproperti, bukan method
uppercase() / lowercase()Stringinstance baru
trim() / trimStart() / trimEnd()Stringbuang whitespace
substring(start) / substring(start, end)Stringend eksklusif
split(delimiter)List<String>bisa menerima Regex
replace(old, new)Stringganti semua
replaceFirst(old, new)Stringganti kemunculan pertama
startsWith(prefix) / endsWith(suffix)Booleancase-sensitive
contains(substring)Booleanbisa menerima Regex
indexOf(substring)Int-1 jika tidak ditemukan

Daftar di atas bukan berarti satu-satunya method yang tersedia. Tipe String memiliki puluhan method lain yang bisa dieksplorasi di dokumentasi resmi Kotlin, termasuk padStart/padEnd untuk menambah karakter pengisi, repeat(n) untuk mengulang string, reversed() untuk membalik urutan karakter, serta forEach dan iterator untuk iterasi langsung. Method toSet() dan toSortedSet() berguna saat kita ingin karakter unik dari sebuah string. Penggunaan method yang tepat membuat kode tetap ringkas sambil menjaga keterbacaan untuk rekan pengembang lain.

Referensi Lanjutan #

  • Strings — rujukan resmi method String standar seperti substring dan length
  • kotlin.text package — API reference paket kotlin.text untuk method string lengkap

Penutup #

Katalog method di atas mencakup sebagian besar kebutuhan manipulasi teks sehari-hari. Namun, untuk skenario yang melibatkan banyak konkatenasi atau penyusunan teks secara bertahap, menggunakan String biasa akan tidak efisien karena setiap operasi membuat instance baru. Solusi yang lebih hemat adalah StringBuilder — topik yang akan kita bahas tuntas pada chapter berikutnya.