Jenis data string adalah urutan karakter, seperti huruf, angka, dan simbol .Ini adalah jenis data untuk menyimpan sebagian besar informasi berbasis teks.
Deklarasikan string
Untuk menyatakan variabel string, letakkan kutipan di sekitar karakter.Lebih umum menggunakan kutipan ganda ( " ), tetapi kutipan tunggal ( ' ) juga berfungsi.Jika Anda ingin menyertakan kutipan tunggal atau ganda dalam string Anda, bungkus string Anda di sekitar jenis kutipan lain, atau gunakan kutipan melarikan diri.
local string1 = "Hello world!"print(string1) --> Selamat dunia!local string2 = 'Hello "world"!'print(string2) --> Hello "world"!
Untuk menyertakan kutipan tunggal dan ganda dalam satu string, atau untuk membuat string multi-baris, nyatakan mereka menggunakan kurung ganda:
local string1 = [[Helloworld!Hello "world"!Hello 'world'!]]print(string1)--> Halo--> dunia!--> Halo "dunia"!--> Hello 'world'!
Jika diperlukan, Anda dapat men nest banyak kurungan dalam satu string menggunakan jumlah tanda sama di kedua braket awal dan akhir:
local string1 = [=[Hello[[world!]]]=]print(string1)--> Halo--> [[world!]]
Gabungkan string
Untuk menggabungkan string, gabungkan mereka dengan dua titik ( .. ).Menggabungkan string tidak menyisipkan spasi di antara mereka, jadi Anda perlu menyertakan spasi(s) di akhir/awal string sebelumnya/berikutnya, atau menggabungkan spasi di antara kedua string.
local hello = "Hello"local helloWithSpace = "Hello "local world = "world!"local string1 = hello .. worldlocal string2 = helloWithSpace .. worldlocal string3 = hello .. " " .. worldprint(string1) --> Dunia Helloworld!print(string2) --> Selamat dunia!print(string3) --> Hello world!
Perhatikan bahwa perintah print() mengambil beberapa argumen dan menggabungkannya dengan ruang, sehingga Anda dapat menggunakan , sebagai gantinya dari .. untuk menghasilkan ruang di print() output.
local hello = "Hello"local world = "world"local exclamationMark = "!"print(hello .. world .. exclamationMark) --> Dunia Helloworld!print(hello, world .. exclamationMark) --> Selamat dunia!print(hello, world, exclamationMark) --> Hello world !
Mengonversi string
Untuk mengkonversi string ke angka, gunakan fungsi tonumber() . Jika string tidak memiliki representasi angka, tonumber() 返回 nil .
local numericString = "123"print(tonumber(numericString)) --> 123local alphanumericString = "Hello123"print(tonumber(alphanumericString)) --> nil
Melarikan string
Untuk menghindari deklarasi string kutipan ganda atau tunggal dan memasukkan hampir setiap karakter, letakkan backslash ( \ ) sebelum karakter.Sebagai contoh:
- Untuk menyertakan satu kutipan dalam satu string kutipan, gunakan \' .
- Untuk menyertakan kutipan ganda dalam string kutipan ganda, gunakan \" .
local string1 = 'Hello \'world\'!'print(string1) --> Selamat 'dunia!'local string2 = "Hello \"world\"!"print(string2) --> Hello "world"!
Beberapa karakter setelah backslash menghasilkan karakter khusus daripada karakter yang lolos:
- Untuk menyertakan baris baru, gunakan \n .
- Untuk menyematkan tab horizontal, gunakan \t .
local string1 = "Hello\nworld!"print(string1)--> Halo--> dunia!local string2 = "Hello\tworld!"print(string2) --> Hello world!
Interpolasi string
Luau mendukung interpolasi string , fitur yang memungkinkan Anda menyisipkan ekspresi ke dalam string.Gunakan backticks ( ` ) untuk menyatakan string yang diinterpolasi, lalu tambahkan ekspresi di dalam kurungan melengkung:
local world = "world"local string1 = `Hello {world}!`print(string1) --> Hello world!
Meskipun variabel adalah penggunaan paling umum, Anda dapat menggunakan ekspresi apa pun, termasuk matematika:
local world = "world"local number = 1local 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) --> Halo dunia, 1 kali!print(string2) --> Halo dunia, 2 kali!print(string3) --> Hello world a third time!
Aturan pelarian standar berlaku untuk backticks, kurpih braket, dan backslashes:
local string1 = `Hello \`\{world\}\`!`print(string1) --> Hello `{world}`!
Konversi matematika
Jika Anda melakukan operasi matematika pada string, Luau secara otomatis mengubah string menjadi angka.Jika string tidak memiliki representasi angka, ia membuang kesalahan.
print("55" + 10) --> 65print("55" - 10) --> 45print("55" * 10) --> 550print("55" / 10) --> 5.5print("55" % 10) --> 5print("Hello" + 10) --> print("Hello" + 10):1: attempt to perform arithmetic (add) on string and number
Perbandingan
String dapat dibandingkan menggunakan < , <= , > dan >= operator yang dibandingkan menggunakan urutan leksikografis berdasarkan kode ASCII dari setiap karakter dalam string.Ini akan menyebabkan angka dalam string tidak dibandingkan dengan benar, misalnya, "100" akan kurang dari "20" , karena bilah "0" dan "1" memiliki kode ASCII yang lebih rendah daripada byte "2" .
print("Apple" < "apple") --> benarprint("Banana" < "apple") --> benar (B adalah sebelum A di ASCII)print("number100" < "number20") --> true
Referensi pola teks
Sebuah pola string adalah kombinasi karakter yang dapat Anda gunakan dengan string.match() , string.gmatch() , dan fungsi lain untuk menemukan bagian, atau substring, dari string yang lebih panjang.
Pertandingan langsung
Anda dapat menggunakan pertandingan langsung dalam fungsi Luau seperti string.match() , kecuali untuk karakter sihir .Sebagai contoh, perintah ini mencari kata Roblox dalam string:
local match1 = string.match("Welcome to Roblox!", "Roblox")local match2 = string.match("Welcome to my awesome game!", "Roblox")print(match1) --> Robloxprint(match2) --> nil
Kelas karakter
Kelas karakter penting untuk pencarian string yang lebih maju.Anda dapat menggunakannya untuk mencari sesuatu yang tidak harus spesifik karakter tetapi sesuai dengan kategori yang dikenal (kelas), termasuk huruf , digit , spasi , tanda baca , dan banyak lagi.
Tabel berikut menunjukkan kelas karakter resmi untuk pola string Luau:
Kelas | Mewakili | Contoh Pertandingan |
---|---|---|
. | Setiap karakter | 32kasGJ1%fTlk?@94 |
%a | Sebuah huruf besar atau kecil | aBcDeFgHiJkLmNoPqRsTuVwXyZ |
%l | Sebuah huruf kecil | abcdefghijklmnopqrstuvwxyz |
%u | Sebuah huruf besar | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
%d | Digit apa pun (angka) | 0123456789 |
%p | Setiap karakter pengejaan apa pun | !@#;,. |
%w | Karakter alfanumerik (baik huruf atau angka) | aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789 |
%s | Sebuah spasi atau karakter white space | , \n , dan \r |
%c | Karakter kontrol khusus | |
%x | Karakter hexadecimal | 0123456789ABCDEF |
%z | Karakter NULL ( \0 ) |
Untuk kelas karakter huruf tunggal seperti %a dan %s, huruf besar yang sesuai mewakili "lawan" dari kelas.Sebagai kejadian, %p mewakili karakter pengejaan sementara %P mewakili semua karakter kecuali pengejaan.
Karakter sihir
Ada 12 "karakter ajaib" yang disediakan untuk tujuan khusus dalam pola:
$ | % | ^ | * | ( | ) |
. | [ | ] | + | - | ? |
Anda dapat melarikan diri dan mencari karakter sihir menggunakan simbol %.Sebagai contoh, untuk mencari roblox.com , melarikan diri dari simbol . (periode) dengan menyertakannya dengan % seperti di %. .
-- “roblox.com” cocok dengan “roblox#com” karena periode diinterpretasikan sebagai “karakter apa pun”local match1 = string.match("What is roblox#com?", "roblox.com")print(match1) --> roblox#com-- Melarikan diri dari periode dengan % sehingga diinterpretasikan sebagai karakter periode literallocal match2 = string.match("I love roblox.com!", "roblox%.com")print(match2) --> roblox.com
Pengait
Anda dapat mencari pola di awal atau akhir string dengan menggunakan simbol ^ dan $.
local start1 = string.match("first second third", "^first") -- Pertandingan karena "pertama" ada di awalprint(start1) --> pertamalocal start2 = string.match("third second first", "^first") -- Tidak cocok karena "pertama" tidak ada di awalprint(start2) --> tidak adalocal end1 = string.match("first second third", "third$") -- Pertandingan karena "ketiga" berada di akhiriprint(end1) --> ketigalocal end2 = string.match("third second first", "third$") -- Tidak cocok karena "ketiga" tidak berada di akhiriprint(end2) --> nil
Anda juga dapat menggunakan keduanya ^ dan $ bersama-sama untuk memastikan pola hanya cocok dengan seluruh string dan bukan hanya beberapa bagiannya.
-- Menggunakan kedua ^ dan $ untuk cocok di seluruh string penuhlocal match1 = string.match("Roblox", "^Roblox$") -- Pertandingan karena "Roblox" adalah seluruh string (kesetaraan)print(match1) --> Robloxlocal match2 = string.match("I play Roblox", "^Roblox$") -- Tidak cocok karena "Roblox" tidak berada di awal DAN akhiriprint(match2) --> tidak adalocal match3 = string.match("I play Roblox", "Roblox") -- Pertandingan karena "Roblox" terkandung dalam "Saya bermain Roblox"print(match3) --> Roblox
Pengubah kelas
Secara sendiri, kelas karakter hanya cocok dengan satu karakter dalam string.Sebagai kejadian, pola berikut ( ) mulai membaca string dari kiri ke kanan, menemukan digit pertama ( ) dan berhenti.
local match = string.match("The Cloud Kingdom has 25 power gems", "%d")print(match) --> 2
Anda dapat menggunakan modifikator dengan kelas karakter apa pun untuk mengontrol hasil:
Pengukur | Makna |
---|---|
+ | Cocokkan 1 atau lebih dari kelas karakter sebelumnya |
- | Cocok sebanyak mungkin dengan kelas karakter sebelumnya |
* | Cocokkan 0 atau lebih dari kelas karakter sebelumnya |
? | Cocokkan 1 atau kurang dari kelas karakter sebelumnya |
%n | Untuk n antara 1 dan 9 , cocok dengan substring yang sama dengan string yang ditangkap n. |
%bxy | Penangkapan seimbang yang cocok dengan x , y , dan semua yang ada di antara (misalnya, %b() cocok dengan pasangan kurung dan semua yang ada di antara mereka) |
Menambahkan modifikasi ke pola yang sama ( "%d+" bukan "%d" ), output 25 bukan 2 :
local match1 = string.match("The Cloud Kingdom has 25 power gems", "%d")print(match1) --> 2local match2 = string.match("The Cloud Kingdom has 25 power gems", "%d+")print(match2) --> 25
Set kelas
Set harus digunakan ketika kelas karakter tunggal tidak dapat melakukan seluruh pekerjaan.Sebagai kejadian, Anda mungkin ingin mencocokkan kedua huruf kecil ( %l ) dan karakter tanda baca ( %p ) menggunakan satu pola.
Set didefinisikan oleh kurung [] di sekitar mereka.Dalam contoh berikut, perhatikan perbedaan antara menggunakan satu set ( "[%l%p]+" ) dan tidak menggunakan satu set ( "%l%p+" ).
local match1 = string.match("Hello!!! I am another string.", "[%l%p]+") -- Mengaturprint(match1) --> ello!!!local match2 = string.match("Hello!!! I am another string.", "%l%p+") -- Tak beraturanprint(match2) --> o!!!
Perintah pertama (atur) memberi tahu Luau untuk menemukan karakter huruf kecil dan tanda baca.Dengan penambahan kuantifikasi + setelah seluruh atur, ia menemukan semua dari karakter-karakter itu ( ello!!! ), berhenti saat mencapai ruang.
Dalam perintah kedua (tidak ditetapkan), kuantifikasi + hanya berlaku untuk kelas %p sebelumnya, jadi Luau hanya mengambil karakter huruf kecil pertama ( o ) sebelum serangkaian tanda baca ( !!! ).
Seperti Kelaskarakter, set bisa menjadi "lawan" dari diri mereka sendiri.Ini dilakukan dengan menambahkan karakter ^ pada awal atur, langsung setelah pembukaan [.Sebagai kejadian, "[%p%s]+" mewakili kedua 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 pertandingan antara karakter awal dan akhir.Ini adalah fitur lanjutan yang dijelaskan secara lebih rinci di Manual Lua 5.1.
Penangkapan string
String menangkap adalah sub-pola dalam pola.Ini ditutup dalam kurungan () dan digunakan untuk mendapatkan (ambil) substring yang cocok dan menyimpannya ke variabel.Sebagai contoh, pola berikut berisi dua penangkapan, (%a+) dan (%d+) , yang mengembalikan dua substring saat mencocokkanberhasil.
local pattern = "(%a+)%s?=%s?(%d+)"local key1, val1 = string.match("TwentyOne = 21", pattern)print(key1, val1) --> Dua Puluh Satu 21local key2, val2 = string.match("TwoThousand= 2000", pattern)print(key2, val2) --> Dua Ribu 2000local key3, val3 = string.match("OneMillion=1000000", pattern)print(key3, val3) --> OneMillion 1000000
Dalam pola sebelumnya, kuantifikasi ? yang mengikuti kedua kelas %s adalah tambahan yang aman karena membuat ruang di kedua sisi tanda = opsional.Itu berarti pertandingan berhasil jika satu (atau keduanya) ruang hilang di sekitar tanda sama.
Penangkapan string juga bisa dilingkari seperti contoh berikut:
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) doprint(description)print(kingdom)end--> Kerajaan Cloud adalah surga--> Kerajaan Cloud--> Kerajaan Hutan adalah damai--> Forest Kingdom
Pencarian pola ini bekerja sebagai berikut:
Pembaca string.gmatch() mencari kes cocok pada seluruh pola "deskripsi" yang didefinisikan oleh pasangan luar kurungan orang tua.Ini berhenti di koma pertama dan menangkap yang mengikuti:
# | Pola | Tangkap |
---|---|---|
1 | (The%s(%a+%sKingdom)[%w%s]+) | Kerajaan Cloud adalah surga |
Menggunakan ambilpertama yang berhasil, iterator kemudian mencari kecocokan pada pola "kerajaan" yang didefinisikan oleh pasangan orangtua dalam.Pola terpisah ini hanya menangkap hal mengikuti:
# | Pola | Tangkap |
---|---|---|
2 | (%a+%sKingdom) | Kerajaan Cloud |
Pengulang kemudian mundur dan melanjutkan pencarian seluruh string, menangkap hal mengikuti:
# | Pola | Tangkap |
---|---|---|
3 | (The%s(%a+%sKingdom)[%w%s]+) | Kerajaan Hutan adalah damai |
4 | (%a+%sKingdom) | Kerajaan Hutan |
Selain semua yang di atas, ada kasus khusus dengan tangkapan kosong ( () ).Jika tangkapan kosong, maka posisi di 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 42local start2, finish2 = string.match(match2, pattern)print(start2, finish2) --> 43 84
Kapur khusus ini dapat disusun seperti kapur biasa:
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) doprint(kingdom, position)end--> Awan 10--> Forest 42
Nilai yang dikembalikan tidak biasa karena mereka adalah angka daripada string:
local match = "This is an example"local pattern = "This is an ()example"local position = string.match(match, pattern)print(typeof(position)) --> number