程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> Lua獲取utf8字符串長度和字符串截取並用...代替

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

編輯:更多關於編程

       這篇文章主要介紹了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 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

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved