【问题标题】:Split lua string into characters将lua字符串拆分为字符
【发布时间】:2015-01-14 14:58:23
【问题描述】:

我只发现这与我正在寻找的内容有关:Split string by count of characters 但它对我的意思没有用。

我有一个字符串变量,它包含 3 个数字(可以是 000 到 999)。我需要将每个数字(字符)分开并将它们放入一个表格中。

我正在为一个使用 lua 的游戏模组编程,它有一些额外的功能。如果你能帮助我使用:http://wiki.multitheftauto.com/wiki/Split 会很棒,但任何其他方式也可以。

提前致谢

【问题讨论】:

    标签: lua


    【解决方案1】:

    更正了 OP 想要询问的内容:

    要将一个 3 位数的数字拆分为 3 个数字,那就更简单了:

    s='429'
    c1,c2,c3=s:match('(%d)(%d)(%d)')
    t={tonumber(c1),tonumber(c2),tonumber(c3)}
    

    “如何拆分由 3 位数字组成的长字符串”的答案:

    这是微不足道的。你可以看看gmatch function in the reference manual

    s="123456789"
    res={}
    for num in s:gmatch('%d%d%d') do
        res[#res+1]=tonumber(num)
    end
    

    或者如果你不喜欢循环播放:

    res={}
    s:gsub('%d%d%d',function(n)res[#res+1]=tonumber(n)end)
    

    【讨论】:

    • 第一个代码不起作用,第二个正是我需要的。接受你的回答,谢谢:)
    • 很奇怪。在这里他们做的完全一样。
    • 好吧,我还有一个问题,如果字符串小于 009,表的第一个索引可以正常工作,否则它等于完整的字符串:s 并且其他值为 nil
    • 好的,现在一切都很好,我只需要使用 :gmatch('%d') 而不是 :gmatch('%d%d%d') 因为我的字符串只有 3 个字符。对不起我的愚蠢。再次感谢
    • 对,现在我看到了问题......我以为你想要将一长串 3 位数的数字拆分成相应的数字 :)
    【解决方案2】:

    我一直在寻找类似的东西,但要避免循环 - 并希望将其作为单线。最终,我从lua-users wiki: Split Join找到了这个例子:

    fields = {str:match((str:gsub("[^"..sep.."]*"..sep, "([^"..sep.."]*)"..sep)))}
    

    ...这正是我想要的那种语法 - 一个班轮,返回一个表 - 除了,我真的不明白发生了什么:/ 不过,经过一番摸索,我设法用这个习语找到正确的语法来分割成字符,这显然是:

    fields = { str:match( (str:gsub(".", "(.)")) ) }
    

    我猜,gsub 基本上会在每个字符 '.' 周围加上括号'(.)' - 这样match 会将它们视为一个单独的匹配单元,并将它们“提取”为单独的单位也是如此......但我仍然不明白为什么str:gsub(".", "(.)") 周围有额外的括号。

    我用 Lua5.1 对此进行了测试:

    str = "a - b - c"
    fields = { str:match( (str:gsub(".", "(.)")) ) }
    print(table_print(fields))
    

    ... 其中table_print 来自lua-users wiki: Table Serialization;这段代码打印出来:

    "a"
    " "
    "-"
    " "
    "b"
    " "
    "-"
    " "
    "c"
    

    【讨论】:

      猜你喜欢
      • 2015-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-25
      • 2010-11-28
      • 2018-06-01
      • 1970-01-01
      • 2014-10-28
      相关资源
      最近更新 更多