74 lines
2.0 KiB
Lua
74 lines
2.0 KiB
Lua
|
---
|
|||
|
--- Generated by EmmyLua(https://github.com/EmmyLua)
|
|||
|
--- DateTime: 2018/5/7 0007 上午 10:53
|
|||
|
--- 字符串帮助器
|
|||
|
|
|||
|
--矫正名字显示长度
|
|||
|
function FixNameShow(playerName)
|
|||
|
local trueLen = SubStringGetTotalIndex(playerName)
|
|||
|
if trueLen>6 then
|
|||
|
playerName = SubStringUTF8(playerName,1,5)
|
|||
|
playerName = playerName..'...'
|
|||
|
end
|
|||
|
return playerName
|
|||
|
end
|
|||
|
|
|||
|
--截取中英混合的UTF8字符串,endIndex可缺省
|
|||
|
function SubStringUTF8(str, startIndex, endIndex)
|
|||
|
if startIndex < 0 then
|
|||
|
startIndex = SubStringGetTotalIndex(str) + startIndex + 1;
|
|||
|
end
|
|||
|
|
|||
|
if endIndex ~= nil and endIndex < 0 then
|
|||
|
endIndex = SubStringGetTotalIndex(str) + endIndex + 1;
|
|||
|
end
|
|||
|
|
|||
|
if endIndex == nil then
|
|||
|
return string.sub(str, SubStringGetTrueIndex(str, startIndex));
|
|||
|
else
|
|||
|
return string.sub(str, SubStringGetTrueIndex(str, startIndex), SubStringGetTrueIndex(str, endIndex + 1) - 1);
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
--获取中英混合UTF8字符串的真实字符数量
|
|||
|
function SubStringGetTotalIndex(str)
|
|||
|
local curIndex = 0;
|
|||
|
local i = 1;
|
|||
|
local lastCount = 1;
|
|||
|
repeat
|
|||
|
lastCount = SubStringGetByteCount(str, i)
|
|||
|
i = i + lastCount;
|
|||
|
curIndex = curIndex + 1;
|
|||
|
until(lastCount == 0);
|
|||
|
return curIndex - 1;
|
|||
|
end
|
|||
|
|
|||
|
function SubStringGetTrueIndex(str, index)
|
|||
|
local curIndex = 0;
|
|||
|
local i = 1;
|
|||
|
local lastCount = 1;
|
|||
|
repeat
|
|||
|
lastCount = SubStringGetByteCount(str, i)
|
|||
|
i = i + lastCount;
|
|||
|
curIndex = curIndex + 1;
|
|||
|
until(curIndex >= index);
|
|||
|
return i - lastCount;
|
|||
|
end
|
|||
|
|
|||
|
--返回当前字符实际占用的字符数
|
|||
|
function 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
|