--返回截取的实际Index
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
--截取中英混合的字符串
function SubString(str, startIndex, endIndex)
if type(str) ~= "string" then
return
end
if startIndex == nil or startIndex < 0 then
return
end
if endIndex == nil or endIndex < 0 then
return
end
return string.sub(str, SubStringGetTrueIndex(str, startIndex),
SubStringGetTrueIndex(str, endIndex + 1) - 1)
end