• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Lua获取utf8字符串长度和字符串截取并用...代替

    一、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 curByte223 then
                byteCount = 2
            elseif curByte>=224 and curByte239 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

    您可能感兴趣的文章:
    • .NET截取指定长度汉字超出部分以"..."代替 实例分享
    • Jquery循环截取字符串的方法(多出的字符串处理成"...")
    • (function($){...})(jQuery)的意思
    • 字太多用...代替的方法(两种)
    上一篇:Lua脚本获取喜马拉雅MP3音频地址
    下一篇:Lua性能优化技巧(一):前言
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Lua获取utf8字符串长度和字符串截取并用...代替 Lua,获取,utf8,字符串,长度,