萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> 編程語言綜合 >> 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

copyright © 萬盛學電腦網 all rights reserved