Lua编写单次分割字符串函数时点号分隔符失效问题求解
问题原因
- Lua 标准库的
string.find()默认使用模式匹配规则,.是 Lua 模式中的通配符,代表匹配任意单个字符。因此你传入分隔符为.时,函数会匹配到字符串的第一个字符,返回起止位置1,1,最终导致分割结果异常。
修复方法
调用string.find()时开启纯文本匹配模式,具体是在方法参数中补充第三个参数为起始查找位置1,第四个参数为true(代表启用plain模式,不会解析分隔符里的模式特殊字符)。
同时可以补充边界判断逻辑,避免分隔符不存在时引发索引错误,修复后的代码如下:
function splitOnce(inputstr, sep) -- 1:从字符串第一个字符开始查找,true:启用纯文本匹配 local s, e = inputstr:find(sep, 1, true) -- 处理分隔符不存在的场景 if not s then return {inputstr, ""} end local t = {} table.insert(t, inputstr:sub(1, s - 1)) table.insert(t, inputstr:sub(e + 1, -1)) return t end
用你示例的输入"STRING.STRING1.STRING2",分隔符为.测试,修复后的函数会正确匹配到第一个.的位置是第7位,分割结果第一个元素为STRING,第二个为STRING1.STRING2,符合预期。
内容的提问来源于stack exchange,提问作者allene50
相关产品推荐
相关产品推荐

