Lua字符串(包含任意字符,如中文)任意位置截取
2023-12-13 07:20:08
常规的截取只需要lua自带的api就可以解决问题:如 string.sub
但是当字符串之中含有中文或者符号的时候,这些接口就麻爪了,当然lua后续更新有可能支持,至少本少当前的Lua版本是不支持的。
废话少说,直接上代码和测试用例
-- 判断utf8字符byte长度
function stringTool.chsize( char )
if not char then
--print("not char")
return 0
elseif char > 240 then
return 4
elseif char > 225 then
return 3
elseif char > 192 then
return 2
else
return 1
end
end
--截取字符串,按字符截取
-- str: 要截取的字符串
-- startChar: 开始字符下标,从1开始
-- numChars: 要截取的字符长度
function stringTool.GetStrSubStr( str, startChar, numChars )
local startIndex = 1
//1.获得从1到自定义的开始字符startChar之前有多少字符
while startChar > 1 do
local char = string.byte(str, startIndex)
startIndex = startIndex + stringTool.chsize(char)
startChar = startChar - 1
end
local currentIndex = startIndex
//2.从自定义的开始到需要的长度下标有多少字符
while numChars > 0 and currentIndex <= #str do
local char = string.byte(str, currentIndex)
currentIndex = currentIndex + stringTool.chsize(char)
numChars = numChars -1
end
//3.根据两者下标对应的总字符长度获得需要截取的字符
return str:sub(startIndex, currentIndex - 1), numChars
end
使用案例
local str1 = “测试打捞”
local str2 = “lq测试23ces”
local str3 = “65测试23ces”
log("测试11 = "…stringTool.GetStrSubStr(str1, 1, 1))
log("测试12 = "…stringTool.GetStrSubStr(str1, 2, 3))
log("测试21 = "…stringTool.GetStrSubStr(str2, 1, 3))
log("测试22 = "…stringTool.GetStrSubStr(str2, 1, 5))
log("测试31 = "…stringTool.GetStrSubStr(str3, 1, 4))
log("测试32 = "…stringTool.GetStrSubStr(str3, 2, 5))
打印:
测试11 = 测
测试12 = 试打
测试21 = lq测
测试22 = lq测试2
测试31 = 65测试
测试32 = 5测试2
参考原文链接:https://blog.csdn.net/u012685888/article/details/126961659
文章来源:https://blog.csdn.net/lq1340817945/article/details/134923429
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!