本文写来就是为了方便使用,并没有过多的技术可言!然而,我们不能每次都写一遍这样的代码,我们只是要方便复用,方便在不同的项目中去复用!
我们一起拿来看代码吧:
--截取中英混合的UTF8字符串,endIndex可缺省
function funA:SubStringUTF8(str, startIndex, endIndex)
if startIndex < 0 or endIndex < 0 then
return str
end
if endIndex == nil then
return string.sub(str, self:SubStringLimitSize(str, startIndex));
else
return string.sub(str, self:SubStringLimitSize(str, startIndex), self:SubStringLimitSize(str, endIndex ) - 1);
end
end
--获取字符串中在不超过一定字节的中文字节数
function funA:SubStringLimitSize(str, index)
local curIndex = 0;
local i = 1;
local lastCount = 1;
repeat
lastCount = self:SubStringGetByteCount(str, i)
i = i + lastCount;
curIndex = curIndex + 1;
until(i >= index);
return i - lastCount;
end
--返回当前字符实际占用的字符数
function funA:SubStringGetByteCount(str, index)
local curByte = string.byte(str, index)
local byteCount = 1;
if curByte == nil then
byteCount = 0
elseif curByte > 0 and curByte <= 127 then
byteCount = 1
elseif curByte>=192 and curByte<=223 then
byteCount = 2
elseif curByte>=224 and curByte<=239 then
byteCount = 3
elseif curByte>=240 and curByte<=247 then
byteCount = 4
end
return byteCount;
end
好了,不妨验证一下,超过三个汉字就截取,显示为XXX...,下面我们调用看看:
local playerName = playerInfo.name
if string.len(playerName) > 12 then
playerName = funA:SubStringUTF8(playerName, 0, 12).."..."
end
txtPlayerName:setString(playerName)
=================================== the end ====================================
好了,今天的分享就到这里,如有不足之处,还望大家及时指正,随时欢迎探讨交流!!!