lua 简易方法分割字符串

网上找的方法大多比较复杂,什么闭包,什么 gsub,我只要一个简单是字符串分割而已,索性自己写算了,面向搜索引擎编程罪恶感满满,我想当个真的程序员~~

方法一: 直接循环,根据索引截取字符串

--[[
    str:要分割的字符串
    dilimiter:分隔符
--]]
function split(str, dilimiter)
    -- 声明准备要分割的子字符串的前后索引, 以及保存分割后的子字符串的 table
    local frontIndex, backIndex, myTable = 0, 0, {}
    while true do
        -- 找到下一个要分割的字符串的索引位置
        backIndex = string.find(str, dilimiter, frontIndex + 1)
        -- 当查找到最后的时候 backIndex 将会是空的,就退出循环
        if backIndex ~= nil then
            table.insert(myTable, string.sub(str, frontIndex + 1, backIndex - 1))
        else
            table.insert(myTable, string.sub(str, frontIndex + 1))
            return myTable
        end
        -- 把后面找到的分隔符的索引位置交换给 frontIndex,用于继续往下查找
        frontIndex = backIndex
    end
end

测试:

local str = ",1,142,2212,1"
resultArr = split(str, ',')
for i, v in ipairs(resultArr) do
    print(i, v)
end

结果:

1	
2    1
3    142
4    2212
5    1

方法二: 使用 gmatch() 方法匹配

function split2(str, dilimiter)
    -- 用于保存找到的子字符串
    local myTable = {}
    -- str..dilimiter 的做法是在字符串最后加一个分隔符,不然找到的元素会少一个
    for subStr in string.gmatch(str..dilimiter, "(.-)"..dilimiter) do
        table.insert(myTable, subStr)
    end
    return myTable
end

测试:

s = "scm:1:123,scm:1:1,scm:1:142,scm:1:2212,scm:1:1,"
resultArr = split2(s, ',')
for i, v in ipairs(resultArr) do
    print(i, v)
end

结果:

1    scm:1:123
2    scm:1:1
3    scm:1:142
4    scm:1:2212
5    scm:1:1
6    

友情提示: 性能方面没有和其他的比较过,所以不太清楚,分割超长字符串的同学请注意哦~

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值