如何在Lua中获取字符串的第一个字符?

假设我有一个Lua字符串:

> s = "abc123"

我想要获取s1,它只是s的第一个字符,如果s为空,则为空。

我尝试使用

> s1 = s[1]

> s1 = s[0]

但是两个都只返回nil

如何在不使用外部Lua库的情况下获取第一个字符?

点赞
用户2597135
用户2597135

你可以使用 string.sub() 来获取长度为 1 的子字符串:

> s = "abc123"
> string.sub(s, 1, 1)
a

这对于空字符串也适用:

> string.sub("", 1, 1) -- => ""
2017-03-07 14:03:00
用户3618581
用户3618581

你也可以使用这个更短的变体:

s:sub(1, 1)
2020-01-24 13:11:20
用户13930989
用户13930989
local string_meta = getmetatable('')

function string_meta:__index( key )
    local val = string[ key ]
    if ( val ) then
        return val
    elseif ( tonumber( key ) ) then
        return self:sub( key, key )
    else
        error( "attempt to index a string value with bad key ('" .. tostring( key ) .. "' is not part of the string library)", 2 )
    end
end

local str = "Hello"
print(str[1]) -- 输出为 "H"
2020-07-14 18:24:12