我是靠谱客的博主 眼睛大白云,最近开发中收集的这篇文章主要介绍Lua字符串中的中英文分割处理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

-- 计算 UTF8 字符串的长度,每一个中文算一个字符
-- @function [parent=#string] utf8len
-- @param string input 输入字符串
-- @return integer#integer  长度
--[[--
计算 UTF8 字符串的长度,每一个中文算一个字符
~~~ lua
local input = "你好World"
print(string.utf8len(input))
-- 输出 7
~~~
]]
-- end --
function string.utf8len(input)
    local len  = string.len(input)
    local left = len
    local cnt  = 0
    local arr  = {0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc}
    while left ~= 0 do
        local tmp = string.byte(input, -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

-- lzh
-- 功能:将字符串拆成单个字符,存在一个table中
function string.utf8tochars(input)
     local list = {}
     local len  = string.len(input)
     local index = 1
     local arr  = {0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc}
     while index <= len do
        local c = string.byte(input, index)
        local offset = 1
        if c < 0xc0 then
            offset = 1
        elseif c < 0xe0 then
            offset = 2
        elseif c < 0xf0 then
            offset = 3
        elseif c < 0xf8 then
            offset = 4
        elseif c < 0xfc then
            offset = 5
        end
        local str = string.sub(input, index, index+offset-1)
        -- print(str)
        index = index + offset
        table.insert(list, {byteNum = offset, char = str})
     end

     return list
end

---------应用的例子---------
-- 函数功能:字符处理
--          超30个英文字符长度,后面的用...代替
function Test:ProcessEmailName(content)
    local chars = string.utf8tochars(content)
    local nums = 0
    local newString = ""
    for i,v in ipairs(chars or {}) do        
        if v.byteNum>=3 then
            nums = nums + 2
        else
            nums = nums + 1
        end
        -- 限制超过30个英文字符的长度
        -- printLog(nums)
        if nums <= 30 then
            newString = newString .. v.char
        else
            newString = newString .. "..."
            break
        end
    end
    return newString
end

最后

以上就是眼睛大白云为你收集整理的Lua字符串中的中英文分割处理的全部内容,希望文章能够帮你解决Lua字符串中的中英文分割处理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部