国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

Lua獲取utf8字符串長度和字符串截取并用...代替

2024-07-21 23:04:29
字體:
來源:轉載
供稿:網友

一、LUA獲取utf8字符串長度

復制代碼 代碼如下:

--- 獲取utf8編碼字符串正確長度的方法
-- @param str
-- @return number
function utfstrlen(str)
local len = #str;
local left = len;
local cnt = 0;
local arr={0,0xc0,0xe0,0xf0,0xf8,0xfc};
while left ~= 0 do
local tmp=string.byte(str,-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

 

二、截取給定字符串的部分長度,超出部分用省略號“.”替換

復制代碼 代碼如下:

--@brief 切割字符串,并用“...”替換尾部
--@param sName:要切割的字符串
--@return nMaxCount,字符串上限,中文字為2的倍數
--@param nShowCount:顯示英文字個數,中文字為2的倍數,可為空
--@note         函數實現:截取字符串一部分,剩余用“...”替換

 

function GetShortName(sName,nMaxCount,nShowCount)
    if sName == nil or nMaxCount == nil then
        return
    end
    local sStr = sName
    local tCode = {}
    local tName = {}
    local nLenInByte = #sStr
    local nWidth = 0
    if nShowCount == nil then
       nShowCount = nMaxCount - 3
    end
    for i=1,nLenInByte do
        local curByte = string.byte(sStr, i)
        local byteCount = 0;
        if 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
        local char = nil
        if byteCount > 0 then
            char = string.sub(sStr, i, i+byteCount-1)
            i = i + byteCount -1
        end
        if byteCount == 1 then
            nWidth = nWidth + 1
            table.insert(tName,char)
            table.insert(tCode,1)
           
        elseif byteCount > 1 then
            nWidth = nWidth + 2
            table.insert(tName,char)
            table.insert(tCode,2)
        end
    end
   
    if nWidth > nMaxCount then
        local _sN = ""
        local _len = 0
        for i=1,#tName do
            _sN = _sN .. tName[i]
            _len = _len + tCode[i]
            if _len >= nShowCount then
                break
            end
        end
        sName = _sN .. "..."
    end
    return sName
end


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 申扎县| 广宁县| 额尔古纳市| 隆尧县| 绥棱县| 台南市| 怀集县| 台北市| 东平县| 抚宁县| 辽阳县| 分宜县| 张北县| 新干县| 鹤岗市| 时尚| 河西区| 栾城县| 会宁县| 酉阳| 大英县| 遂昌县| 城口县| 固镇县| 渝中区| 子长县| 突泉县| 安达市| 潍坊市| 岳阳市| 高要市| 阿坝县| 南召县| 宣城市| 钟祥市| 高邮市| 通江县| 石河子市| 赫章县| 阿尔山市| 长海县|