String

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Tipe data string adalah sekumpulan karakter, seperti huruf, angka, dan simbol. Ini adalah tipe data untuk menyimpan sebagian besar informasi yang berbasis teks.

Meng deklarasikan string

Untuk mendeklarasikan variabel string, letakkan tanda kutip di sekitar karakter. Lebih umum menggunakan tanda kutip ganda ("), tetapi tanda kutip tunggal (') juga bisa digunakan. Jika Anda ingin menyertakan tanda kutip tunggal atau ganda dalam string Anda, bungkus string Anda dengan jenis kutipan yang lain, atau gunakan kutipan yang di-escape.


local string1 = "Hello world!"
print(string1) --> Hello world!
local string2 = 'Hello "world"!'
print(string2) --> Hello "world"!

Untuk menyertakan baik tanda kutip tunggal maupun ganda dalam string, atau untuk membuat string multi-baris, deklarasikan mereka menggunakan tanda kurung ganda:


local string1 = [[Hello
world!
Hello "world"!
Hello 'world'!]]
print(string1)
--> Hello
--> world!
--> Hello "world"!
--> Hello 'world'!

Jika perlu, Anda bisa menumpuk beberapa tanda kurung di dalam string dengan menggunakan jumlah tanda sama yang sama di kedua tanda kurung awal dan akhir:


local string1 = [=[Hello
[[world!]]
]=]
print(string1)
--> Hello
--> [[world!]]

Menggabungkan string

Untuk menggabungkan string, konkatenasi mereka dengan dua titik (..). Menggabungkan string tidak menyisipkan spasi di antara mereka, jadi Anda perlu menyertakan spasi di akhir/per awal dari string sebelumnya/berikutnya, atau menggabungkan spasi di antara kedua string tersebut.


local hello = "Hello"
local helloWithSpace = "Hello "
local world = "world!"
local string1 = hello .. world
local string2 = helloWithSpace .. world
local string3 = hello .. " " .. world
print(string1) --> Helloworld!
print(string2) --> Hello world!
print(string3) --> Hello world!

Perhatikan bahwa perintah print() mengambil beberapa argumen dan menggabungkannya dengan spasi, jadi Anda bisa menggunakan , alih-alih .. untuk menghasilkan spasi dalam output print().


local hello = "Hello"
local world = "world"
local exclamationMark = "!"
print(hello .. world .. exclamationMark) --> Helloworld!
print(hello, world .. exclamationMark) --> Hello world!
print(hello, world, exclamationMark) --> Hello world !

Mengonversi string

Untuk mengonversi string menjadi angka, gunakan fungsi tonumber(). Jika string tersebut tidak memiliki representasi angka, tonumber() akan mengembalikan nil.


local numericString = "123"
print(tonumber(numericString)) --> 123
local alphanumericString = "Hello123"
print(tonumber(alphanumericString)) --> nil

Meng-escape string

Untuk meng-escape deklarasi string dengan tanda kutip ganda atau tunggal dan menyertakan hampir semua karakter, letakkan garis miring terbalik (\) sebelum karakter tersebut. Misalnya:

  • Untuk menyertakan tanda kutip tunggal dalam string tanda kutip tunggal, gunakan \'.
  • Untuk menyertakan tanda kutip ganda dalam string tanda kutip ganda, gunakan \".

local string1 = 'Hello \'world\'!'
print(string1) --> Hello 'world'!
local string2 = "Hello \"world\"!"
print(string2) --> Hello "world"!

Karakter tertentu yang mengikuti garis miring terbalik menghasilkan karakter khusus alih-alih karakter yang di-escape:

  • Untuk menyertakan baris baru, gunakan \n.
  • Untuk menyertakan tab horizontal, gunakan \t.

local string1 = "Hello\nworld!"
print(string1)
--> Hello
--> world!
local string2 = "Hello\tworld!"
print(string2) --> Hello world!

Interpolasi string

Luau mendukung interpolasi string, sebuah fitur yang memungkinkan Anda menyisipkan ekspresi ke dalam string. Gunakan tanda backtick (`) untuk mendeklarasikan string yang diinterpolasi, lalu tambahkan ekspresi di dalam kurung kurawal:


local world = "world"
local string1 = `Hello {world}!`
print(string1) --> Hello world!

Meskipun variabel adalah penggunaan yang paling umum, Anda dapat menggunakan ekspresi apa pun, termasuk matematika:


local world = "world"
local number = 1
local letters = {"w", "o", "r", "l", "d"}
local string1 = `Hello {world}, {number} time!`
local string2 = `Hello {world}, {number + 1} times!`
local string3 = `Hello {table.concat(letters)} a third time!`
print(string1) --> Hello world, 1 time!
print(string2) --> Hello world, 2 times!
print(string3) --> Hello world a third time!

Aturan peng-escape standar berlaku untuk backticks, kurung kurawal, dan garis miring terbalik:


local string1 = `Hello \`\{world\}\`!`
print(string1) --> Hello `{world}`!

Konversi matematika

Jika Anda melakukan operasi matematika pada string, Luau secara otomatis mengonversi string menjadi angka. Jika string tersebut tidak memiliki representasi angka, akan menghasilkan kesalahan.


print("55" + 10) --> 65
print("55" - 10) --> 45
print("55" * 10) --> 550
print("55" / 10) --> 5.5
print("55" % 10) --> 5
print("Hello" + 10) --> print("Hello" + 10):1: attempt to perform arithmetic (add) on string and number

Perbandingan

String dapat dibandingkan menggunakan operator <, <=, > dan >= yang membandingkan menggunakan urutan leksikografis berdasarkan kode ASCII dari masing-masing karakter dalam string. Ini akan menyebabkan angka dalam string tidak dibandingkan dengan benar, misalnya, "100" akan kurang dari "20", karena byte "0" dan "1" memiliki kode ASCII yang lebih rendah daripada byte "2".


print("Apple" < "apple") --> true
print("Banana" < "apple") --> true (B datang sebelum a dalam ASCII)
print("number100" < "number20") --> true

Referensi pola string

Pola string adalah kombinasi karakter yang dapat digunakan dengan string.match(), string.gmatch(), dan fungsi lainnya untuk menemukan sebuah potongan, atau substring, dari string yang lebih panjang.

Pencocokan langsung

Anda dapat menggunakan pencocokan langsung dalam fungsi Luau seperti string.match(), kecuali untuk karakter ajaib. Sebagai contoh, perintah ini mencari kata Roblox dalam sebuah string:


local match1 = string.match("Welcome to Roblox!", "Roblox")
local match2 = string.match("Welcome to my awesome game!", "Roblox")
print(match1) --> Roblox
print(match2) --> nil

Kelas karakter

Kelas karakter penting untuk pencarian string yang lebih canggih. Anda dapat menggunakannya untuk mencari sesuatu yang tidak selalu spesifik karakter tetapi pas dalam kategori (kelas) tertentu, termasuk huruf, angka, spasi, tanda baca, dan lainnya.

Tabel berikut menunjukkan kelas karakter resmi untuk pola string Luau:

KelasMewakiliContoh Pencocokan
.Karakter apapun32kasGJ1%fTlk?@94
%aSebuah huruf besar atau kecilaBcDeFgHiJkLmNoPqRsTuVwXyZ
%lHuruf kecilabcdefghijklmnopqrstuvwxyz
%uHuruf besarABCDEFGHIJKLMNOPQRSTUVWXYZ
%dAngka apapun0123456789
%pKarakter tanda baca apapun!@#;,.
%wKarakter alfanumerik (baik huruf atau angka)aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789
%sKarakter spasi atau whitespace , \n, dan \r
%cSebuah karakter kontrol khusus
%xKarakter heksadesimal0123456789ABCDEF
%zKarakter NULL (\0)

Untuk kelas karakter tunggal seperti %a dan %s, huruf besar yang sesuai mewakili "lawannya" kelas tersebut. Misalnya, %p mewakili karakter tanda baca sedangkan %P mewakili semua karakter kecuali tanda baca.

Karakter ajaib

Ada 12 "karakter ajaib" yang dikhususkan untuk tujuan khusus dalam pola:

$%^*()
.[]+-?

Anda dapat meng-escape dan mencari karakter ajaib menggunakan simbol %. Sebagai contoh, untuk mencari roblox.com, escape simbol . (titik) dengan memperdalamnya dengan % seperti pada %..


-- "roblox.com" mencocokkan "roblox#com" karena titik diinterpretasikan sebagai "karakter apapun"
local match1 = string.match("What is roblox#com?", "roblox.com")
print(match1) --> roblox#com
-- Escape titik dengan % sehingga diinterpretasikan sebagai karakter titik literal
local match2 = string.match("I love roblox.com!", "roblox%.com")
print(match2) --> roblox.com

Penanda

Anda dapat mencari pola di awal atau akhir string dengan menggunakan simbol ^ dan $.


local start1 = string.match("first second third", "^first") -- Mencocokkan karena "first" ada di awal
print(start1) --> first
local start2 = string.match("third second first", "^first") -- Tidak mencocokkan karena "first" tidak ada di awal
print(start2) --> nil
local end1 = string.match("first second third", "third$") -- Mencocokkan karena "third" ada di akhir
print(end1) --> third
local end2 = string.match("third second first", "third$") -- Tidak mencocokkan karena "third" tidak ada di akhir
print(end2) --> nil

Anda juga dapat menggunakan baik ^ dan $ bersama-sama untuk memastikan pola hanya mencocokkan string penuh dan tidak hanya sebagian dari itu.


-- Menggunakan baik ^ dan $ untuk mencocokkan di seluruh string
local match1 = string.match("Roblox", "^Roblox$") -- Mencocokkan karena "Roblox" adalah seluruh string (kesetaraan)
print(match1) --> Roblox
local match2 = string.match("I play Roblox", "^Roblox$") -- Tidak mencocokkan karena "Roblox" tidak ada di awal DAN akhir
print(match2) --> nil
local match3 = string.match("I play Roblox", "Roblox") -- Mencocokkan karena "Roblox" ada di dalam "I play Roblox"
print(match3) --> Roblox

Modifikator kelas

Dengan sendirinya, kelas karakter hanya mencocokkan satu karakter dalam string. Misalnya, pola berikut ("%d") mulai membaca string dari kiri ke kanan, menemukan angka pertama (2), dan berhenti.


local match = string.match("The Cloud Kingdom has 25 power gems", "%d")
print(match) --> 2

Anda bisa menggunakan modifikator dengan kelas karakter apapun untuk mengontrol hasilnya:

PengkuantitasArti
+Cocokkan 1 atau lebih dari kelas karakter sebelumnya
-Cocokkan sesedikit mungkin dari kelas karakter sebelumnya
*Cocokkan 0 atau lebih dari kelas karakter sebelumnya
?Cocokkan 1 atau kurang dari kelas karakter sebelumnya
%nUntuk n antara 1 dan 9, mencocokkan substring yang sama dengan string yang ke-n.
%bxyPencocokan tangkap berimbang yang mencocokkan x, y, dan semua yang ada di antara (misalnya, %b() mencocokkan sepasang tanda kurung dan semua yang ada di antara mereka)

Menambahkan modifikator pada pola yang sama ("%d+" daripada "%d"), mengeluarkan 25 alih-alih 2:


local match1 = string.match("The Cloud Kingdom has 25 power gems", "%d")
print(match1) --> 2
local match2 = string.match("The Cloud Kingdom has 25 power gems", "%d+")
print(match2) --> 25

Kelas set

Set harus digunakan ketika satu kelas karakter tidak dapat melakukan seluruh pekerjaan. Misalnya, Anda mungkin ingin mencocokkan baik huruf kecil (%l) dan karakter tanda baca (%p) menggunakan satu pola.

Set didefinisikan dengan tanda kurung [] di sekitarnya. Dalam contoh berikut, perhatikan perbedaan antara menggunakan set ("[%l%p]+") dan tidak menggunakan set ("%l%p+").


local match1 = string.match("Hello!!! I am another string.", "[%l%p]+") -- Set
print(match1) --> ello!!!
local match2 = string.match("Hello!!! I am another string.", "%l%p+") -- Non-set
print(match2) --> o!!!

Perintah pertama (set) memberi tahu Luau untuk menemukan baik karakter huruf kecil dan tanda baca. Dengan kuantifier + ditambahkan setelah keseluruhan set, itu menemukan semua karakter tersebut (ello!!!), berhenti saat mencapai spasi.

Dalam perintah kedua (non-set), kuantifier + hanya diterapkan pada kelas %p sebelumnya, jadi Luau hanya menangkap karakter huruf kecil pertama (o) sebelum serangkaian tanda baca (!!!).

Seperti kelas karakter, set dapat memiliki "lawan" dari dirinya sendiri. Ini dilakukan dengan menambahkan karakter ^ di awal set, tepat setelah pembuka [. Misalnya, "[%p%s]+" mewakili baik tanda baca dan spasi, sementara "[^%p%s]+" mewakili semua karakter kecuali tanda baca dan spasi.

Set juga mendukung rentang yang memungkinkan Anda menemukan seluruh rentang kecocokan antara karakter awal dan akhir. Ini adalah fitur canggih yang dijelaskan lebih detail di dalam Manual Lua 5.1.

Tangkap string

Tangkap string adalah sub-pola dalam sebuah pola. Ini dibungkus dalam kurung () dan digunakan untuk mendapatkan (menangkap) substring yang cocok dan menyimpannya ke dalam variabel. Misalnya, pola berikut berisi dua tangkapan, (%a+) dan (%d+), yang mengembalikan dua substring setelah pencocokan berhasil.


local pattern = "(%a+)%s?=%s?(%d+)"
local key1, val1 = string.match("TwentyOne = 21", pattern)
print(key1, val1) --> TwentyOne 21
local key2, val2 = string.match("TwoThousand= 2000", pattern)
print(key2, val2) --> TwoThousand 2000
local key3, val3 = string.match("OneMillion=1000000", pattern)
print(key3, val3) --> OneMillion 1000000

Kuantifier ? yang mengikuti kedua kelas %s adalah tambahan yang aman karena membuat spasi di kedua sisi tanda = menjadi opsional. Itu berarti pencocokan berhasil jika salah satu (atau kedua) spasi hilang di sekitar tanda sama.

Dalam fungsi string.gsub(), Anda dapat menyertakan grup tangkap dalam string pengganti menggunakan %1, %2, %3, dst., hingga %9. Meskipun Luau mendukung hingga 32 grup tangkap sebelum menghasilkan kesalahan, Anda hanya dapat mereferensikan sembilan yang pertama dengan sintaks ini:


local str = "love2play Roblox"
local pattern = "(%w+)(%d+)(%w+)%s+(%w+)"
local replacement = "I %1 %2 %3 %4!"
local result = string.gsub(str, pattern, replacement)
print(result) --> I love 2 play Roblox!

Anda juga dapat menempatkan tangkapan string:


local places = "The Cloud Kingdom is heavenly, The Forest Kingdom is peaceful"
local pattern = "(The%s(%a+%sKingdom)[%w%s]+)"
for description, kingdom in string.gmatch(places, pattern) do
print(description)
print(kingdom)
end
--> The Cloud Kingdom is heavenly
--> Cloud Kingdom
--> The Forest Kingdom is peaceful
--> Forest Kingdom

Pencarian pola ini bekerja sebagai berikut:

Iterators string.gmatch() mencari pencocokan pada seluruh pola "deskripsi" yang didefinisikan oleh pasang kurung luar. Ini berhenti di koma pertama dan menangkap yang berikut:

#PolaTangkap
1(The%s(%a+%sKingdom)[%w%s]+)The Cloud Kingdom is heavenly

Menggunakan tangkapan pertamanya yang berhasil, iterator kemudian mencari pencocokan pada pola "kerajaan" yang didefinisikan oleh pasang kurung dalam. Pola bersarang ini hanya menangkap yang berikut:

#PolaTangkap
2(%a+%sKingdom)Cloud Kingdom

Iterator kemudian mundur dan melanjutkan pencarian di string penuh, menangkap yang berikut:

#PolaTangkap
3(The%s(%a+%sKingdom)[%w%s]+)The Forest Kingdom is peaceful
4(%a+%sKingdom)Forest Kingdom

Selain semua di atas, ada kasus khusus dengan sebuah tangkapan kosong (()). Jika sebuah tangkapan kosong, maka posisi dalam string akan ditangkap:


local match1 = "Where does the capture happen? Who knows!"
local match2 = "This string is longer than the first one. Where does the capture happen? Who knows?!"
local pattern = "()Where does the capture happen%? Who knows!()"
local start1, finish1 = string.match(match1, pattern)
print(start1, finish1) --> 1 42
local start2, finish2 = string.match(match2, pattern)
print(start2, finish2) --> 43 84

Tangkapan khusus ini dapat disarang seperti tangkapan normal:


local places = "The Cloud Kingdom is heavenly, The Forest Kingdom is peaceful."
local pattern = "The (%a+()) Kingdom is %a+"
for kingdom, position in string.gmatch(places, pattern) do
print(kingdom, position)
end
--> Cloud 10
--> Forest 42

Nilai yang dikembalikan tidak biasa karena merupakan angka alih-alih string:


local match = "This is an example"
local pattern = "This is an ()example"
local position = string.match(match, pattern)
print(typeof(position)) --> number
©2026 Roblox Corporation. Roblox, logo Roblox, dan Powering Imagination termasuk dalam merek dagang kami yang terdaftar dan tidak terdaftar di AS dan negara lainnya.