Grunnleggende om strenger: sammenføying og lengde
Bruk .. til sammenføying, # til lengde og string.rep/reverse.
Grunnleggende om strenger: sammenføying og lengde er en gratis leksjon i Lua Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Lua Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Lua Academy inneholder totalt 4 leksjoner.
Strengkonkatenering med ..
Lua bruker .. (to punktum) til strengkonkatenering. Det fungerer med strenger og tall (tall konverteres automatisk). I motsetning til + i mange språk brukes + i Lua bare til aritmetikk – hvis De bruker + på strenger, oppstår det en feil.
local first = "Hello"
local second = "World"
print(first .. ", " .. second .. "!") -- Hello, World!
-- Numbers auto-converted
local age = 30
print("Age: " .. age) -- Age: 30
-- Bad: print("x" + "y") ERROR: arithmetic on stringLengdeoperatoren #
#-operatoren returnerer byte-lengden til en streng. For ASCII-strenger er dette likt antallet tegn. For UTF-8-strenger med flere byte teller # byte, ikke tegn – et UTF-8-emoji teller som 4. Bruk et UTF-8-bibliotek for lengder som teller tegn korrekt.
print(#"hello") -- 5
print(#"") -- 0
print(#"café") -- 5 (c,a,f,é=2bytes)
local s = "Lua"
for i = 1, #s do
io.write(string.byte(s, i) .. " ")
end
print() -- 76 117 97string.rep og string.reverse
string.rep(s, n, sep) gjentar strengen s nøyaktig n ganger, med et valgfritt skilletegn. string.reverse(s) snur rekkefølgen på strengens byte. Begge returnerer nye strenger – Lua-strenger kan ikke endres.
print(string.rep("ab", 3)) -- ababab
print(string.rep("ha", 3, "-")) -- ha-ha-ha
print(string.rep("x", 0)) -- (empty)
print(string.reverse("hello")) -- olleh
print(string.reverse("12345")) -- 54321string.upper og string.lower
string.upper(s) og string.lower(s) konverterer ASCII-tegn. De håndterer ikke Unicode – ikke-ASCII-tegn sendes gjennom uendret. For sammenligning uten hensyn til store og små bokstaver bør De konvertere begge strengene til små bokstaver før sammenligningen.
print(string.upper("hello")) -- HELLO
print(string.lower("WORLD")) -- world
print(string.upper("Lua 5.4!")) -- LUA 5.4!
-- Case-insensitive comparison
local a = "Hello"
local b = "hello"
print(a:lower() == b:lower()) -- trueMetodesyntaks med kolon
Strengfunksjoner kan kalles med kolon-syntaks på strengverdier: s:upper() i stedet for string.upper(s). Dette fungerer fordi strenger har en metatabell med __index = string, slik at alle strengbibliotekfunksjoner er tilgjengelige som metoder på enhver streng.
local s = " hello world "
print(s:upper()) -- HELLO WORLD
print(s:len()) -- 15
print(s:rep(2, "|")) -- same as string.rep(s,2,"|")
-- Chain calls
print(("lua"):upper():reverse()) -- AULStrengers uforanderlighet
Lua-strenger er uforanderlige. De kan ikke endre tegn direkte. Hver strengoperasjon oppretter en ny streng. Ved omfattende konkatenering i løkker bør De bruke en tabell til å samle delene og table.concat til slutt – det er langt mer effektivt enn gjentatt bruk av ...
-- Efficient string building
local parts = {}
for i = 1, 5 do
parts[i] = "item" .. i
end
local result = table.concat(parts, ", ")
print(result) -- item1, item2, item3, item4, item5
-- Slow! Creates 5 intermediate strings:
-- local s = ""
-- for i = 1, 5 do s = s .. "item" .. i endtable.concat for sammenføying
table.concat(t, sep, i, j) setter array-elementer sammen til en streng med et skilletegn. Den fungerer bare med verdier av typen string og number – tabeller eller boolske verdier fører til en feil. Dette er den raskeste måten å bygge strenger fra mange deler på.
local parts = {"one", "two", "three", "four"}
print(table.concat(parts, ", ")) -- one, two, three, four
print(table.concat(parts, " | ", 2, 3)) -- two | three
-- Building CSV
local row = {1, "Alice", 95, true}
-- Need tostring for non-string values:
for i, v in ipairs(row) do row[i] = tostring(v) end
print(table.concat(row, ","))Strengsammenligning
Strenger sammenlignes leksikografisk etter byteverdi. Store bokstaver kommer før små bokstaver i ASCII (A=65, a=97), så "Z" < "a" er true. Bruk string.lower på begge sider for sortering uten hensyn til store og små bokstaver.
print("abc" < "abd") -- true
print("abc" < "abcd") -- true (shorter)
print("Z" < "a") -- true (Z=90, a=97)
print("10" < "9") -- true (lexicographic!)
print(10 < 9) -- false (numeric)
-- Sort strings case-insensitively
local words = {"Banana","apple","Cherry"}
table.sort(words, function(a,b) return a:lower()<b:lower() end)
print(table.concat(words,", "))tostring og tonumber
tostring(v) konverterer en hvilken som helst verdi til strengrepresentasjonen dens. tonumber(s, base) tolker en streng som et tall. tonumber returnerer nil hvis tolkingen mislykkes, i motsetning til mange språk som utløser et unntak. Basen kan være fra 2 til 36 ved tolking av heltall.
print(tostring(42)) -- 42
print(tostring(true)) -- true
print(tostring(nil)) -- nil
print(tostring({1,2})) -- table: 0x...
print(tonumber("3.14")) -- 3.14
print(tonumber("0xff")) -- 255 (hex)
print(tonumber("11",2)) -- 3 (binary)
print(tonumber("abc")) -- nil (invalid)Strenginternering
Lua internlagrer korte strenger: Identiske strenginnhold deler det samme objektet i minnet. Derfor blir == på strenger i praksis en pekersammenligning etter en hash-sjekk – svært raskt. Internlagring betyr også at oppretting av strenger har en liten kostnad (beregning av hash), men gjentatte strenger koster ingenting.
local s1 = "hello"
local s2 = "hel" .. "lo"
-- Same content, interned to same object
print(s1 == s2) -- true
print(#s1) -- 5
-- Long strings may not be interned
-- They are still compared correctly by value
local long1 = string.rep("x", 1000)
local long2 = string.rep("x", 1000)
print(long1 == long2) -- trueHurtigsjekk
Hva er den mest effektive måten å bygge en lang streng fra mange små deler på i Lua?
Oppsummering: Grunnleggende om strenger
Viktige punkter:
..konkatenerer; bruk aldri+for strenger#steller byte (ikke Unicode-tegn)s:upper(),s:lower(),s:rep(n, sep),s:reverse()- Strenger er uforanderlige – hver operasjon returnerer en ny streng
- Bygg store strenger med en tabell og
table.concat tostring/tonumberfor typekonvertering
Lær deg Lua med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 40
- Leksjoner
- 159
Ofte stilte spørsmål
Er leksjonen «Grunnleggende om strenger: sammenføying og lengde» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Lua Academy, inkludert «Grunnleggende om strenger: sammenføying og lengde», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Lua Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Grunnleggende om strenger: sammenføying og lengde»?
Bruk .. til sammenføying, # til lengde og string.rep/reverse. Du øver på Lua Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Lua Academy?
Ingen tidligere erfaring er nødvendig. Lua Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.
Hvor lang tid tar leksjonen «Grunnleggende om strenger: sammenføying og lengde»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Lua Academy-leksjonen?
Ja. Alle Lua Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Grunnleggende om strenger: sammenføying og lengde
- Finne og hente ut delstrenger
- string.format for utdata
- string.gsub og string.gmatch