lua字符串相关方法,如截取中文字符串

string.sub(s, i, j)

string.sub截取字符串,是按字节截取的。截取英文没问题,有中文就会出错,因为一个中文可能是2到5个字节。所以我们需要先获取字符的字节长度。

 string.byte(s, i, j)

  • 参数s为字符串,i为开始字符索引,j为结束字符索引
  • 解释:函数返回字符s[i], s[i+1], ···, s[j]内部数字编码(ASCII码),其中参数i的默认值是1,而参数j的默认值是i。需要注意的是该函数在返回的数字编码在跨平台方面不一定是可移植的。

通过这个函数和chsize,我们可以获取到字符串里任意字符的字节数。

如下面的代码,可以获取字符串str1 的第一个字符 ‘字’ 的长度len

    local str1 = "字符"
    local char = string.byte(str1, 1)
    local len = stringTool.chsize(char)

 判断utf8字符的字节长度

根据内部数字编码(ASCII码)获取字符的字节长度

-- 判断utf8字符byte长度
function stringTool.chsize( char )
	    if not char then
        --print("not char")
        return 0
    elseif char > 240 then
        return 4
    elseif char > 225 then
        return 3
    elseif char > 192 then
        return 2
    else
        return 1
    end
end

按字符截取字符串

可以截取含中文的字符串,按字符截取。

先把字符的位置转换为字节的位置,再用sub函数截取。

--截取字符串,按字符截取
-- str:         要截取的字符串
-- startChar:   开始字符下标,从1开始
-- numChars:    要截取的字符长度
function stringTool.utf8sub( str, startChar, numChars )
	local startIndex = 1
    while startChar > 1 do
        local char = string.byte(str, startIndex)
        startIndex = startIndex + stringTool.chsize(char)
        startChar = startChar - 1
    end

    local currentIndex = startIndex

    while numChars > 0 and currentIndex <= #str do
        local char = string.byte(str, currentIndex)
        currentIndex = currentIndex + stringTool.chsize(char)
        numChars = numChars -1
    end
    return str:sub(startIndex, currentIndex - 1), numChars
end

-- 计算utf8字符串字符数, 各种字符都按一个字符计算
function stringTool.utf8len( str )
    local len = 0
    local currentIndex = 1
    while currentIndex <= #str do
        local char = string.byte(str, currentIndex)
        currentIndex = currentIndex + stringTool.chsize(char)
        len = len +1
    end
    return len
end

-- 计算utf8字符串字符数, 中文按两个字符计算
function stringTool.utf8len_ChineseInTwo( str )
    local len = 0
    local currentIndex = 1
    while currentIndex <= #str do
        local char = string.byte(str, currentIndex)
        local charLength = stringTool.chsize(char)
        currentIndex = currentIndex + charLength
        if charLength > 2 then
            len = len + 2
        else
            len = len +1
        end        
    end
    return len
end

你可能感兴趣的:(lua,lua,开发语言)