在Lua中将字符串拆分为等长的块

我需要将一个字符串分成相等大小的块(如果字符串长度不能被整除,则最后一块可能更小)。

假设我有一个有2000个字符的字符串。我想将这个字符串分成500个字符的同等大小的块,因此我将得到4个500个字符的字符串。

当初始字符串的长度和块大小都不固定时,如何在Lua中实现?

示例

字符串:"0123456789"(长度=10)应该被分成每个3个字符的字符串

结果:“012”,“345”,“678”,“9”

(结果是在表中还是由迭代器返回无所谓)

点赞
用户1009479
用户1009479

将一个字符串分成 4 个部分,你可以使用以下代码来获取大小:

local str = "0123456789"
local sz = math.ceil(str:len() / 4)

接下来,第一个字符串就是 str:sub(1, sz),剩下的就留给你了。

2014-08-27 12:45:18
用户258523
用户258523
> function tt(s)
>>     local t={}
>>     for p in s:gmatch("..?.?") do
>>         t[#t+1]=p
>>     end
>>
>>     for i,v in ipairs(t) do
>>         print(i, v)
>>     end
>> end
> tt("0123")
1       012
2       3
> tt("0123456789")
1       012
2       345
3       678
4       9
> tt("012345678901")
1       012
2       345
3       678
4       901

这是一段 Lua 代码,输入一串字符串并按照每 2 到 3 个字符为一组进行拆分并输出结果。可以看到,在输入 "0123" 时,输出为一组(012)和一个单独的字符 3;在输入 "0123456789" 时,输出为四组(012,345,678,9);在输入 "012345678901" 时,输出为四组(012,345,678,901)。

2014-08-27 13:04:03
用户2285255
用户2285255
-- 将文本按照指定长度分割成小块
local function splitByChunk(text, chunkSize)
    local s = {}
    for i=1, #text, chunkSize do
        s[#s+1] = text:sub(i,i+chunkSize - 1)
    end
    return s
end

-- 用法示例
local st = splitByChunk("0123456789",3)
for i,v in ipairs(st) do
   print(i, v)
end

-- 输出结果
-- 1    012
-- 2    345
-- 3    678
-- 4    9
2016-09-14 01:39:51