You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何读取多行分隔的字符串?Lua中拆分转数组的方法问询

没问题,我来帮你搞定这个Lua里处理多行/空格分隔字符串的问题!

核心思路:把分隔的字符串拆分成数组

不管你的原始字符串是多行换行分隔还是空格分隔(甚至两者混合),我们可以通过Lua的字符串匹配功能来实现拆分,最终得到你想要的local names = {"Noba", "Detalle"}这样的数组。

方案1:通用处理(兼容换行+空格混合的情况)

如果你的字符串里既有换行又有空格,或者不确定分隔符类型,用这个万能分割函数,它会把所有空白字符(换行、空格、制表符等)都当作分隔符,提取所有非空白的内容:

function split_whitespace(str)
    local names = {}
    -- 匹配所有连续的非空白字符序列
    for name in string.gmatch(str, "%S+") do
        table.insert(names, name)
    end
    return names
end

使用示例

假设你从PHPMyAdmin获取到的原始字符串是这样的:

-- 可能是多行,也可能是带空格的单行
local raw_data = [[Noba
Detalle
Test User]]

调用函数就能得到目标数组:

local names = split_whitespace(raw_data)
-- 此时names = {"Noba", "Detalle", "Test", "User"}

方案2:仅按换行分割(如果确定是纯多行格式)

如果你的数据是严格按换行分隔,没有多余的空格,那可以专门按换行符来拆分,还能顺便过滤空行和每行前后的空白:

function split_newline(str)
    local names = {}
    -- 按换行符分割每行
    for line in string.gmatch(str, "[^\n]+") do
        -- 去掉每行前后的空格
        local trimmed_line = string.gsub(line, "^%s*(.-)%s*$", "%1")
        -- 跳过空行
        if trimmed_line ~= "" then
            table.insert(names, trimmed_line)
        end
    end
    return names
end

使用示例

local raw_data = [[Noba
Detalle]]
local names = split_newline(raw_data)
-- 此时names = {"Noba", "Detalle"}

验证结果

你可以通过循环打印数组来确认是否正确:

for index, name in ipairs(names) do
    print(string.format("第%d个名称:%s", index, name))
end

内容的提问来源于stack exchange,提问作者dohdle

火山引擎 最新活动