14. Bekerja dengan Teks
Bab 12 membahas alat-alat string untuk sehari-hari: menggabungkan
dengan .., panjang dengan #, huruf besar dan
kecil, mengulang, dan memformat. Bab ini menambahkan tiga fungsi untuk
melihat isi sebuah string: memotongnya, mencari sesuatu di
dalamnya, dan mengganti sebagian darinya.
Memotong dengan
string.sub
string.sub(s, i, j) mengembalikan bagian dari
s mulai posisi i sampai j,
menghitung karakter dari 1:
print(string.sub("hello", 1, 3)) -- hel
print(string.sub("hello", 3)) -- llo (dari 3 sampai akhir)
print(string.sub("hello", -2)) -- lo (2 karakter terakhir)Tiga hal yang perlu diperhatikan:
- Posisi dimulai dari 1, seperti indeks list (Bab 22).
- Tidak mengisi
jartinya "sampai akhir string". - Posisi negatif dihitung dari belakang:
-1adalah karakter terakhir,-2adalah karakter kedua dari belakang, dan seterusnya.
Seperti semua fungsi string, sub mengembalikan string
baru dan tidak mengubah string aslinya.
Buka exercises/14/01-sub.lua. Sebuah variabel menyimpan
sebuah kata. Menggunakan string.sub, cetak hanya huruf
pertamanya, lalu hanya huruf terakhirnya.
Mencari dengan
string.find
string.find(s, what) mencari what di dalam
s. Jika menemukan kecocokan, fungsi ini mengembalikan
posisi awal dan akhir; jika tidak,
mengembalikan nil:
print(string.find("hello world", "world")) -- 7 11
print(string.find("hello world", "z")) -- nilKarena ketika tidak ada kecocokan nilainya adalah nil,
find cocok dipadukan dengan if:
local sentence = "the password is swordfish"
if string.find(sentence, "sword") then
print("Found it.")
else
print("Not in there.")
endfind memperlakukan beberapa karakter tanda baca
(. ( ) % + - * ? [ ] ^ $) sebagai simbol "pola" khusus,
bukan teks biasa. Gunakan huruf dan kata-kata biasa saja untuk sekarang
dan kamu tidak akan mengalami masalah ini. Untuk mencocokkan salah satu
simbol tersebut secara harfiah, berikan true sebagai
argumen keempat: string.find(s, ".", 1, true).
Mengganti dengan
string.gsub
string.gsub(s, what, replacement) mengembalikan string
baru dengan setiap kemunculan what diganti
dengan replacement, ditambah hitungan berapa kali
penggantian dilakukan:
local shout, count = string.gsub("hello", "l", "L")
print(shout) -- heLLo
print(count) -- 2Jika kamu hanya ingin string barunya saja, abaikan hitungannya:
local clean = string.gsub("a-b-c", "-", " ")
print(clean) -- a b cCatatan yang sama soal pola dari find juga berlaku untuk
bagian what: gunakan teks biasa saja untuk sekarang.
Pintasan titik dua
Setiap pemanggilan string.xxx(s, ...) juga bisa ditulis
sebagai s:xxx(...), di mana string sebelum titik dua
menjadi argumen pertama:
local name = "Keiko"
print(name:sub(1, 1)) -- K (sama dengan string.sub(name, 1, 1))
print(name:upper()) -- KEIKOBentuk titik dua ini akan sering kamu temukan di kode Lua dan Roblox sungguhan. Kamu sudah mengenalnya secara singkat di Bab 12; sekarang muncul lagi, karena method string adalah tempat paling sering bentuk ini digunakan.
PR
File PR ada di exercises/14/homework/.
Soal 1 — Inisial
Buka exercises/14/homework/01-initials.lua. Dua variabel
menyimpan nama depan dan nama belakang. Menggunakan
string.sub, cetak inisial orang tersebut, seperti
K.R. untuk "Keiko Raharja".
Soal 2 — Mengecek Isi
Buka exercises/14/homework/02-contains.lua. Sebuah
variabel menyimpan sebuah kalimat. Gunakan string.find di
dalam if untuk mencetak yes jika mengandung
kata lua, dan no jika tidak.
Soal 3 — Sensor
Buka exercises/14/homework/03-censor.lua. Sebuah
variabel menyimpan sebuah pesan pendek. Gunakan string.gsub
untuk mengganti setiap spasi dengan tanda hubung -, lalu
cetak hasilnya.
Tantangan — Panjang Kata Terakhir
Buka exercises/14/homework/04-last-letter.lua. Sebuah
variabel menyimpan sebuah kata. Menggunakan posisi negatif di
string.sub, cetak tiga karakter terakhirnya, lalu cetak
panjangnya dengan #. Buat agar berfungsi untuk kata apa pun
tanpa menghitung secara manual.
Bingung atau sudah selesai? Buka halaman solusi PR.