Lua Academy · Lektion

Grundlæggende strenghåndtering: sammenkædning og længde

Brug .. til sammenkædning, # til længde samt string.rep/string.reverse.

Lektion 1 af 412 trin

Grundlæggende strenghåndtering: sammenkædning og længde er en gratis Lua Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Lua Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Lua Academy-kurset indeholder 4 lektioner i alt.

Strengsammenkædning med ..

Lua bruger .. (to punktummer) til strengsammenkædning. Det fungerer med strenge og tal (tal konverteres automatisk). I modsætning til + i mange sprog bruges + i Lua kun til aritmetik — brug af + på strenge giver en fejl.

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 string

Længdeoperatoren #

Operatoren # returnerer en strengs længde i bytes. For ASCII-strenge svarer dette til antallet af tegn. For UTF-8-strenge med flere bytes tæller # bytes, ikke tegn — en UTF-8-emoji tæller som 4. Brug et UTF-8-bibliotek for længder, der tæller 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 97

string.rep og string.reverse

string.rep(s, n, sep) gentager strengen s præcis n gange med en valgfri separator. string.reverse(s) vender strengens byterækkefølge. Begge returnerer nye strenge — Lua-strenge kan ikke ændres.

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"))   -- 54321

string.upper og string.lower

string.upper(s) og string.lower(s) konverterer ASCII-tegn. De håndterer ikke Unicode — ikke-ASCII-tegn forbliver uændrede. Ved sammenligning uden hensyn til store og små bogstaver skal du konvertere begge strenge til små bogstaver først.

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())    -- true

Syntaks for kolon-metoder

Stringfunktioner kan kaldes med kolon-syntaks på strengværdier: s:upper() i stedet for string.upper(s). Det fungerer, fordi strenge har en metatabel med __index = string, så alle strengbibliotekets funktioner er tilgængelige 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())  -- AUL

Strenges uforanderlighed

Lua-strenge er uforanderlige. Du kan ikke ændre tegn direkte i strengen. Hver strengoperation opretter en ny streng. Ved omfattende sammenkædning i løkker skal du bruge en tabel til at samle delene og table.concat til sidst — det er langt mere effektivt end gentagen brug af ...

-- 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 end

table.concat til sammenføjning

table.concat(t, sep, i, j) sammenføjer array-elementer til en streng med en separator. Det fungerer kun med streng- og talværdier — tabeller eller boolske værdier giver en fejl. Dette er den hurtigste måde at opbygge strenge fra mange dele 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

Strenge sammenlignes leksikografisk efter byteværdi. Store bogstaver kommer før små bogstaver i ASCII (A=65, a=97), så "Z" < "a" er true. Brug string.lower på begge sider for sortering uden hensyn til store og små bogstaver.

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 enhver værdi til dens strengrepræsentation. tonumber(s, base) fortolker en streng som et tal. tonumber returnerer nil, hvis fortolkningen mislykkes, i modsætning til mange sprog, der kaster en undtagelse. Basen kan være fra 2 til 36 ved fortolkning af heltal.

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)

Internalisering af strenge

Lua internaliserer korte strenge: Strenge med identisk indhold deler det samme objekt i hukommelsen. Derfor er == på strenge i praksis en sammenligning af pointere efter et hash-tjek — og meget hurtigt. Internalisering betyder også, at oprettelse af en streng har en lille omkostning på grund af beregningen af dens hash, men gentagne strenge koster ikke ekstra.

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)  -- true

Hurtigt tjek

Hvad er den mest effektive måde at opbygge en lang streng ud fra mange små dele i Lua?

Opsummering: Grundlæggende om strenge

Vigtige punkter:

  • .. sammenkæder strenge; brug aldrig + til strenge
  • #s tæller bytes, ikke Unicode-tegn
  • s:upper(), s:lower(), s:rep(n, sep), s:reverse()
  • Strenge kan ikke ændres — hver operation returnerer en ny streng
  • Opbyg store strenge med en tabel og table.concat
  • tostring/tonumber til typekonvertering
Gratis at komme i gang

Lær Lua med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
40
Lektioner
159

Ofte stillede spørgsmål

Er lektionen “Grundlæggende strenghåndtering: sammenkædning og længde” gratis?

Ja — alle 3 lektioner i læringssporet Lua Academy, inklusive “Grundlæggende strenghåndtering: sammenkædning og længde”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Lua Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Grundlæggende strenghåndtering: sammenkædning og længde”?

Brug .. til sammenkædning, # til længde samt string.rep/string.reverse. Du øver dig i Lua Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Lua Academy?

Der kræves ingen tidligere erfaring. Lua Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “Grundlæggende strenghåndtering: sammenkædning og længde”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Lua Academy-lektion?

Ja. Alle Lua Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Grundlæggende strenghåndtering: sammenkædning og længde
  2. Søgning efter og udtræk af delstrenge
  3. string.format til output
  4. string.gsub og string.gmatch
← Tilbage til Lua Academy