Lua StringUtil-Luaの文字列のいくつかの一般的な操作StringUtil

9010 ワード

noteディレクトリ
  • は、1文字のバイトサイズ
  • を取得する.
  • utf 8文字列の長さ
  • utf 8取得文字列のサブ列
  • ある文字によって文字列を1つの配列table
  • に分割する.
  • 携帯端末において、携帯電話のユーザが表情文字
  • を入力か否かを判断する.
  • 文字列にある文字が含まれているか否かを判断する
  • .
    1:1文字のバイトサイズを取得
    utf 8文字法則に基づいて文字の大きさを判断する
    StringUtil.function chsize(char)
        if not char then
            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

    2:utf 8文字列の長さ
    StringUtil.function utf8len( str )
        local len = 0
        local current = 1
        while current <= #str do
            local char = string.byte(str,currentIndex)
            currentIndex = currentIndex + chsize(char)
            len = len + 1
        end
        return len
    end

    3:utf 8文字列のサブ列を取得
    StringUtil.function utf8sub(str,startChar,numChars)
       local startIndex = 1
       while startChar > 1 do
           local char = string.byte(str,startIndex)
           startIndex = startIndex + chsize(char)
           startChar = startChar - 1
       end
    
       local currentIndex = startIndex
    
       while numChars > 0 and currentIndex <= #str do
           local char = string.byte(str,currentIndex)
           currentIndex = currentIndex + chsize(char)
           numChars = numChars = 1
       end
    
       return str:sub(startIndex,currentIndex - 1)
    end

    4:ある文字ごとに文字列を1つの配列(table)に分割する
    function StringUtil.Split(str , strSplit)
        local tSplitStr = {}
        while true do
            local i  = string.find(str,strSplit)
    
            --             ,        
            if nil == i then
                tSplit[#tSplit + 1] = str
            end
    
            local subStr = string.sub(str,1,i - 1)
            tSplitStr[#tSplitStr + 1] = subStr
            str = string.sub(str,i + 1,#str)
        end
        return tSplitStr
    end

    5:モバイル端末で、携帯電話のユーザーが表情文字を入力したかどうかを判断する
    function StringUtil.IsContainEmoji(str)
       local len = string.len(str)--           (          )
       for i = 1,len do
          local char = string.byte(str,i)
          local size = StringUtil.chsize(char)
          i = i + size - 1
          if not((char == 0x00) or (char == 0x9) or
                 (char == 0xA) or (char == 0xD) or
                 ((char >= 0x20) and (char <= oxD7FF)) or
                 ((char >= 0xE000) and (char <= 0xFFFD)) or
                 ((char >= 0x10000) and (char <= 0x10FFFF)) then
            return true
           end    
       end
       return false
    end

    6:文字列に文字が含まれているかどうかを判断する
    function StringUtil.Contains(src , target)
        return nil ~= string.find(str,target)
    end