Teks adalah tipe data paling sering kita olah dalam program aplikasi. Di Kotlin, tipe String merepresentasikan deretan karakter yang bersifat immutable. Sintaks literal String mendukung string template — penyisipan variabel dan ekspresi langsung di dalam literal — yang membuat kode lebih ringkas daripada menggunakan konkatenasi +. Pada chapter ini kita akan membedah deklarasi String, pengindeksan, string template, serta multiline raw string untuk teks panjang.
Deklarasi String #
Literal String ditulis di antara tanda kutip ganda:
val nama: String = "Budi"
val sapaan = "Halo, dunia!" // inferensi: String
val kosong: String = ""
val panjang: String = "Kotlin itu ringkas dan aman"String bersifat immutable — setelah dibuat, isi tidak dapat diubah. Method seperti uppercase() atau replace() mengembalikan String baru tanpa memodifikasi yang asli.
Pengindeksan dan length #
Setiap karakter String dapat diakses melalui indeks via [] atau via method .get():
val nama = "Budi"
val panjang = nama.length // 4
val hurufPertama = nama[0] // 'B'
val hurufTerakhir = nama[nama.length - 1] // 'i'
for (i in nama.indices) {
println("nama[$i] = ${nama[i]}")
}Mengakses indeks di luar rentang memunculkan StringIndexOutOfBoundsException.
String template #
Kotlin mempermudah penyisipan variabel dan ekspresi ke dalam String melalui template:
$nama— sisipkan nilai variabel.${ekspresi}— sisipkan hasil ekspresi kompleks.
val nama = "Budi"
val a = 5
val b = 7
println("Halo, $nama!") // Halo, Budi!
println("Hasil $a + $b = ${a + b}") // Hasil 5 + 7 = 12
println("Daftar: ${listOf("Budi", "Siti")}")Untuk menyisipkan tanda $ literal (bukan template), gunakan escape \$:
val harga = "Simbol \$ bukan template" // Simbol $ bukan templateMultiline raw string #
Kotlin mendukung raw string dengan tiga tanda kutip ganda """...""". Raw string memperbolehkan teks multi-baris tanpa escape \n, dan tidak memerlukan escape tanda kutip ganda di dalamnya:
val alamat = """
Jl. Merdeka No. 17
Kota Bandung
Kode Pos 40123
"""Karena raw string menyimpan indentasi apa adanya, kita biasanya memakai trimMargin() atau trimIndent() untuk membersihkan spasi berlebih.
.trimMargin(marginPrefix)— menghapus spasi sebelum tanda|(default) di setiap baris..trimIndent()— menghapus indentasi minimum umum dari semua baris.
Demonstrasi String #
Berikut program lengkap yang memperlihatkan berbagai fitur String:
fun main() {
val nama: String = "Budi"
val sapaan = "Halo, $nama!"
println(sapaan)
val panjang = nama.length
println("Panjang nama: $panjang karakter")
val hurufPertama = nama[0]
println("Huruf pertama: $hurufPertama")
for (i in nama.indices) {
println("nama[$i] = ${nama[i]}")
}
println()
val a = 5
val b = 7
println("Hasil $a + $b = ${a + b}")
val daftar = listOf("Budi", "Siti", "Dewi")
println("Daftar: ${daftar.joinToString()}")
println()
val berbahaya = "Simbol \$ bukan template"
println(berbahaya)
println()
val alamat = """
|Jl. Merdeka No. 17
|Kota Bandung
|Kode Pos 40123
""".trimMargin()
println("Alamat:")
println(alamat)
println()
val sql = """
SELECT id, nama, umur
FROM pengguna
WHERE umur > $a
ORDER BY nama ASC
""".trimIndent()
println("Query SQL:")
println(sql)
println()
val teksPanjang = """
|Teks multi-baris
|dengan tanda kutip "ganda" di dalamnya.
""".trimMargin()
println(teksPanjang)
println()
println("Apakah nama kosong? ${nama.isEmpty()}")
println("Nama kapital: ${nama.uppercase()}")
println("Nama replace: ${nama.replace('u', 'o')}")
}Output yang Dihasilkan:
Halo, Budi!
Panjang nama: 4 karakter
Huruf pertama: B
nama[0] = B
nama[1] = u
nama[2] = d
nama[3] = i
Hasil 5 + 7 = 12
Daftar: Budi, Siti, Dewi
Simbol $ bukan template
Alamat:
Jl. Merdeka No. 17
Kota Bandung
Kode Pos 40123
Query SQL:
SELECT id, nama, umur
FROM pengguna
WHERE umur > 5
ORDER BY nama ASC
Teks multi-baris
dengan tanda kutip "ganda" di dalamnya.
Apakah nama kosong? false
Nama kapital: BUDI
Nama replace: BodiMari kita amati baris-baris penting pada kode di atas:
- Baris 2-3 (
val sapaan = "Halo, $nama!") —$namaotomatis disisipkan dengan nilai variabelnama. Tidak perlu operator+. - Baris 5 (
nama.length) — propertylengthmengembalikan jumlah karakter (Int). - Baris 8 (
nama[0]) — pengindeksan via[]mengembalikanCharpertama. - Baris 11-13 (
for (i in nama.indices)) —indicesmengembalikanIntRange0..length-1untuk iterasi aman. - Baris 17 (
"Hasil $a + $b = ${a + b}") —$adan$bmenyisipkan variabel;${a + b}mengevaluasi ekspresi aritmatika. - Baris 20 (
daftar.joinToString()) —${...}dapat berisi pemanggilan method apapun yang mengembalikan nilaitoString()-able. - Baris 24 (
"Simbol \$ bukan template") — escape\$menyisipkan tanda dolar literal. - Baris 28-33 (
"""..."""+.trimMargin()) — raw string multi-baris;|adalah penanda margin default..trimMargin()menghapus spasi sebelum|dan|itu sendiri. - Baris 36-43 (
"""..."""+.trimIndent()) — raw string tanpa penanda margin;.trimIndent()menghapus indentasi minimum yang sama di semua baris. Cocok untuk query SQL atau teks berstruktur. - Baris 47-50 (
nama.isEmpty(),nama.uppercase(),nama.replace('u', 'o')) — method utilitasString. Semua mengembalikanStringbaru karenaStringimmutable.
Method umum String #
Beberapa method yang sering dipakai:
| Method | Keterangan | Contoh |
|---|---|---|
.length | Jumlah karakter | "halo".length → 4 |
.isEmpty() / .isNotEmpty() | Apakah kosong | "".isEmpty() → true |
.uppercase() / .lowercase() | Konversi huruf besar/kecil | "halo".uppercase() → HALO |
.replace(old, new) | Ganti karakter/String | "halo".replace('a', 'o') → holo |
.substring(start, end) | Iris String | "halo".substring(1, 3) → al |
.split(delim) | Pisah jadi List | "a,b,c".split(",") → [a, b, c] |
.trim() | Hapus spasi awal/akhir | " halo ".trim() → halo |
.startsWith(prefix) | Apakah diawali prefix | "halo".startsWith("ha") → true |
.contains(sub) | Apakah mengandung sub | "halo".contains("al") → true |
Referensi Lanjutan #
- Strings
— dokumentasi resmi tipe
StringKotlin mencakup template string, raw string, dan operasi umum
Penguasaan String dan template-nya mempermudah penulisan kode yang jelas dan ringkas. Berikutnya, kita akan melihat tipe integer khusus yang tidak pernah negatif — UByte, UShort, UInt, ULong — pada chapter Unsigned Integer Types.