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 j artinya "sampai akhir string".
  • Posisi negatif dihitung dari belakang: -1 adalah karakter terakhir, -2 adalah 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"))        -- nil

Karena 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.")
end

find 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)   -- 2

Jika kamu hanya ingin string barunya saja, abaikan hitungannya:

local clean = string.gsub("a-b-c", "-", " ")
print(clean)   -- a b c

Catatan 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())       -- KEIKO

Bentuk 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.