Lua中实现字符串分割函数split

方法一

function split(input, delimiter)
    input = tostring(input)
    delimiter = tostring(delimiter)
    if (delimiter == "") then return false end
    local pos, arr = 0, {}
    for st, sp in function() return string.find(input, delimiter, pos, true) end do
        table.insert(arr, string.sub(input, pos, st - 1))
        pos = sp + 1
    end
    table.insert(arr, string.sub(input, pos))
    return arr
end

local testStr1 = "hello,world"
local testStr2 = "a,,b,c"
local testStr3 = "a+-b-+c"
local testStr4 = "www.baidu.com"

print(unpack(split(testStr1, ",")))
print(unpack(split(testStr2, ",")))
print(unpack(split(testStr3, "+-")))
print(unpack(split(testStr4, ".")))

-- hello	world
-- a		b	c
-- a	b-+c
-- www	baidu	com

方法二

function split(input, delimiter)
    if type(delimiter) ~= "string" or #delimiter <= 0 then
        return
    end
    local start = 1
    local arr = {}
    while true do
        local pos = string.find(input, delimiter, start, true)
        if not pos then
            break
        end
        table.insert (arr, string.sub (input, start, pos - 1))
        start = pos + string.len (delimiter)
    end
    table.insert (arr, string.sub (input, start))
    return arr
end

local testStr1 = "hello,world"
local testStr2 = "a,,b,c"
local testStr3 = "a+-b-+c"
local testStr4 = "www.baidu.com"

print(unpack(split(testStr1, ",")))
print(unpack(split(testStr2, ",")))
print(unpack(split(testStr3, "+-")))
print(unpack(split(testStr4, ".")))

-- hello	world
-- a		b	c
-- a	b-+c
-- www	baidu	com

ps

在网上看到了不少使用正则表达式来进行分割的,例如:

function split(input, delimiter)
    local arr = {}
    string.gsub(input, '[^' .. delimiter ..']+', function(w) table.insert(arr, w) end)
    return arr
end

local testStr1 = "hello,world"
local testStr2 = "a,,b,c"
local testStr3 = "a+-b-+c"
local testStr4 = "www.baidu.com"

print(unpack(split(testStr1, ",")))
print(unpack(split(testStr2, ",")))  -- 无法正确分割
print(unpack(split(testStr3, "+-")))  -- 无法正确分割
print(unpack(split(testStr4, ".")))

-- hello	world
-- a	b	c
-- a	b	c
-- www	baidu	com

可以看到对于某些字符串是无法正确分割的,所以分割字符串最好还是不要用正则表达式了吧,毕竟 Lua 对正则表达式的支持并不是特别完整!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fightsyj

您的鼓励将是我分享的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值