概述
-- 计算 UTF8 字符串的长度,每一个中文算一个字符
-- @function [parent=#string] utf8len
-- @param string input 输入字符串
-- @return integer#integer 长度
--[[--
计算 UTF8 字符串的长度,每一个中文算一个字符
~~~ lua
local input = "你好World"
print(string.utf8len(input))
-- 输出 7
~~~
]]
-- end --
function string.utf8len(input)
local len = string.len(input)
local left = len
local cnt = 0
local arr = {0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc}
while left ~= 0 do
local tmp = string.byte(input, -left)
local i = #arr
while arr[i] do
if tmp >= arr[i] then
left = left - i
break
end
i = i - 1
end
cnt = cnt + 1
end
return cnt
end
-- lzh
-- 功能:将字符串拆成单个字符,存在一个table中
function string.utf8tochars(input)
local list = {}
local len = string.len(input)
local index = 1
local arr = {0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc}
while index <= len do
local c = string.byte(input, index)
local offset = 1
if c < 0xc0 then
offset = 1
elseif c < 0xe0 then
offset = 2
elseif c < 0xf0 then
offset = 3
elseif c < 0xf8 then
offset = 4
elseif c < 0xfc then
offset = 5
end
local str = string.sub(input, index, index+offset-1)
-- print(str)
index = index + offset
table.insert(list, {byteNum = offset, char = str})
end
return list
end
---------应用的例子---------
-- 函数功能:字符处理
-- 超30个英文字符长度,后面的用...代替
function Test:ProcessEmailName(content)
local chars = string.utf8tochars(content)
local nums = 0
local newString = ""
for i,v in ipairs(chars or {}) do
if v.byteNum>=3 then
nums = nums + 2
else
nums = nums + 1
end
-- 限制超过30个英文字符的长度
-- printLog(nums)
if nums <= 30 then
newString = newString .. v.char
else
newString = newString .. "..."
break
end
end
return newString
end
最后
以上就是眼睛大白云为你收集整理的Lua字符串中的中英文分割处理的全部内容,希望文章能够帮你解决Lua字符串中的中英文分割处理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复