Lua中的字符串解析

我找到了很多在Lua中通过逗号分割字符串的方法,但这不完全是我想要的。我需要能够做到以下几点:我有字符串参数ABC,我需要能够仅提取ABC。我该怎么做?我一直希望像这样的东西能够工作:

x = tostring(ABC)
x[1]
x[2]
x[3]
点赞
用户8572503
用户8572503

很容易,只需**迭代**。

(假设您正在使用Lua版本5.1)


代码:

str = "xyz"
for i = 1, #str do
    local c = str:sub(i,i)
    print(c)
end

输出:

$lua main.lua
x
y
z

在线尝试!


或者如评论中 @tonypdmtr 所说:

for s in s:gmatch '.' do print(s) end
2018-05-30 11:16:15
用户1366973
用户1366973

如果你只想得到一个索引的子字符串,下面的代码在大多数版本的 Lua 中都可以使用:

x = 'ABC'
print (string.sub(x, 1, 1))  -- 'A'
print (string.sub(x, 2, 2))  -- 'B'
print (string.sub(x, 3, 3))  -- 'C'

在 Lua 5.1 及其之后的版本中,可以参考这个 文档 来实现以下代码:

getmetatable('').__index = function(str,i) return string.sub(str,i,i) end

x = 'ABC'
print (x[1])  -- 'A'
print (x[2])  -- 'B'
print (x[3])  -- 'C'
2018-05-30 11:17:45
用户107090
用户107090

你还可以为字符串设置一个 call 元方法:

getmetatable("").__call = string.sub

然后这样就可以使用:

for i=1,4 do
        print(i,x(i),x(i,i))
end
2018-05-30 13:27:10
用户8425022
用户8425022

不使用混淆的元表:

function getCharacters(str)
local x = {}
for i=1, str:len(), 1 do
table.insert(x, str:sub(i, i))
end
return x
end

使用这个函数,无论你的字符串有多长,你都会得到一个填满它各个字符的表 :)

2018-06-01 04:24:14