在Lua中将字符串转换为数字

时间:2016-06-02 09:20:42

标签: lua

在Lua中,我有一个这样的字符串:231 523 402 1223 9043 -1 4,其中包含多个以空格分隔的数字。现在我想将它转换为int数字的向量,如何使用一些内置函数来实现它?

3 个答案:

答案 0 :(得分:4)

您可以将string.gsub与函数一起用作替换值。

  

如果repl是一个函数,那么每次匹配发生时都会调用此函数,并按顺序将所有捕获的子字符串作为参数传递。

使用示例如下:

Error: $parse:isecdom
Referencing a DOM node in Expression

直接使用它:

local function tovector(s)
    local t = {}
    s:gsub('%-?%d+', function(n) t[#t+1] = tonumber(n) end)
    return t
end

结果是一个载体(或Lua术语中的序列):

local t = tovector '231 523 402 1223 9043 -1 4'

答案 1 :(得分:1)

使用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+"将匹配由一个或多个结果数字组成的任何字符串segmet。

由于这不是一个免费的编码服务,我留给你处理找到减号:)只需阅读参考。它非常简单。

获得数字后,可以将它们插入Lua表中。 http://www.lua.org/manual/5.3/manual.html#pdf-table.insert

答案 2 :(得分:0)

您可以将列表转换为此代码

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