在Lua中,我有一个字符串如下:
231 523 402 1223 9043 -1 4
,其中包含用空格分隔的几个数字。现在我想将它转换为整数向量,该如何使用一些内置函数来实现?231 523 402 1223 9043 -1 4
,其中包含用空格分隔的几个数字。现在我想将它转换为整数向量,该如何使用一些内置函数来实现?下面是一个使用示例:如果 repl 是一个函数,则每次出现匹配时都会调用此函数,并按顺序将所有捕获的子字符串作为参数传递。
local function tovector(s)
local t = {}
s:gsub('%-?%d+', function(n) t[#t+1] = tonumber(n) end)
return t
end
local t = tovector '231 523 402 1223 9043 -1 4'
for i,v in ipairs(t) do print(i,v) end
1 231
2 523
3 402
4 1223
5 9043
6 -1
7 4
使用 tonumber
将字符串转换为数字。
使用字符串模式从字符串中获取数字。
http://www.lua.org/manual/5.3/manual.html#pdf-string.gmatch
local example = "123 321 -2"
for strNumber in string.gmatch(example, "%-?%d+") do
tonumber(strNumber)
end
%-
将匹配减号,而%-?
将可选匹配减号,换句话说,可能会有一个减号。
%d+
将匹配由一个或多个连续数字组成的任何字符串段。return {231,523,402,1223,9043,-1,4}
让Lua来做繁重的工作:
s="231 523 402 1223 9043 -1 4"
t=loadstring("return {"..s:gsub("%s+",",").."}")()
for k,v in ipairs(t) do print(k,v) end