lua 含中文的字串處理--分離字元、計算字元數、擷取指定長度
lua中對中文字串的一些處理
分離字元
將每個字元分離出來,放到table中,一個單元內一個字元
function StringToTable(s) local tb = {} --[[ UTF8的編碼規則: 1. 字元的第一個位元組範圍: 0x00—0x7F(0-127),或者 0xC2—0xF4(194-244); UTF8 是相容 ascii 的,所以 0~127 就和 ascii 完全一致 2. 0xC0, 0xC1,0xF5—0xFF(192, 193 和 245-255)不會出現在UTF8編碼中 3. 0x80—0xBF(128-191)只會出現在第二個及隨後的編碼中(針對多位元組編碼,如漢字) ]] for utfChar in string.gmatch(s, "[%z\1-\127\194-\244][\128-\191]*") do table.insert(tb, utfChar) end return tb end
計算字元數
獲取字串長度,設一箇中文長度為2,其他長度為1
function GetUTFLen(s) local sTable = StringToTable(s) local len = 0 local charLen = 0 for i=1,#sTable do local utfCharLen = string.len(sTable[i]) if utfCharLen > 1 then -- 長度大於1的就認為是中文 charLen = 2 else charLen = 1 end len = len + charLen end return len end
獲取指定字元個數的字串的實際長度,設一箇中文長度為2,其他長度為1,count:-1表示不限制
function GetUTFLenWithCount(s, count) local sTable = StringToTable(s) local len = 0 local charLen = 0 local isLimited = (count >= 0) for i=1,#sTable do local utfCharLen = string.len(sTable[i]) if utfCharLen > 1 then -- 長度大於1的就認為是中文 charLen = 2 else charLen = 1 end len = len + utfCharLen if isLimited then count = count - charLen if count <= 0 then break end end end return len end
擷取指定長度
擷取指定字元個數的字串,超過指定個數的,擷取,然後新增...
function GetMaxLenString(s, maxLen)
local len = GetUTFLen(s)
local dstString = s
-- 超長,裁剪,加...
if len > maxLen then
dstString = string.sub(s, 1, GetUTFLenWithCount(s, maxLen))
dstString = dstString.."..."
end
return dstString
end
之所以上面所有的都是設一箇中文長度為2,其他長度為1,是因為需要將文字顯示在指定寬度的區域內,而顯示時,一箇中文的寬度約等於2個其他字元的寬度,所以做上述設定。
如果要1箇中文字元長度為1,只需要修改
charLen = 1
即可。
相關推薦
lua 含中文的字串處理--分離字元、計算字元數、擷取指定長度
lua中對中文字串的一些處理 分離字元 將每個字元分離出來,放到table中,一個單元內一個字元 function StringToTable(s) local tb = {} --[[ UTF8的編碼規則: 1. 字元的第一個
Lua中含中文字串長度計算
轉自:http://m.blog.csdn.net/DanceWithCode1990/article/details/51154681 在專案中遇到了需要在Lua中計算含中文的字串的字串長度。 當時想當然的就用了string.len(“確定”) 發現輸出時竟然是6!後來才知道 ,由於檔案編
Python爬蟲中文小說網點查找小說並且保存到txt(含中文亂碼處理方法)
nbsp nor png erro 請求方式 輸出結果 下載 ros mozilla 從某些網站看小說的時候經常出現垃圾廣告,一氣之下寫個爬蟲,把小說鏈接抓取下來保存到txt,用requests_html全部搞定,代碼簡單,容易上手. 中間遇到最大的問題就是編碼問題,第一抓
python下含中文字串正則表示式的編碼問題
前言Python檔案預設的編碼格式是ascii ,無法識別漢字,因為ascii碼中沒有中文。所以py檔案中要寫中文字元時,一般在開頭加 # -*- coding: utf-8 -*- 或者 #coding=utf-8。這是指定一種編碼格式,意味著用該編碼儲存中文字元(也可以是
中文字串處理
1. 擷取GB2312中文字串 <?php < ?php //擷取中文字串 function mysubstr($str, $start, $len) { $tmpstr = ""; $strlen = $start + $len; f
【字串處理函式】遇到某個字元就使用另外兩個字元替換
//遇到換行符就用"!,"替換的字串處理函式 static void str_handle_replace_with_twochar(char* buf, char* buf_temp) { //計
連結串列實現學生資訊表(含輸入、輸出、計算表長、查詢、插入、刪除等功能)
連結串列實現學生資訊表(含輸入、輸出、計算表長、查詢、插入、刪除等功能) #include <stdio.h> #include <stdlib.h> void menu() { printf("make your choice \n"); pr
javaSE (二十六)map集合遍歷(兩種方法)、輸入字元,計算字元出現次數(用map實現)、HashMap巢狀HashMap
1、map集合遍歷: map集合沒有iterator方法,所以不能直接迭代 直接看下面的程式碼和第一行的註解(加了註釋之後變黑看不清了,所以前面沒加註釋) 1、map的第一種遍歷:遍歷map的所有值:method1() 獲取所有的鍵的集合:Set<K> keySet()
SQL必知必會 -------- 通配符、計算字段、函數
提取 mar 第8章 column round vendor 方法 多少 頁面 1.LIKE操作符 1.1百分號(%)通配符 SELECT prod_id, prod_name FROM Products WHERE prod_name LIKE ‘Fish%‘
實例對象、構造函數、原型之間的關系
http 實例化 call 並且 mic ima 自己的 function 瀏覽器 實例對象、構造函數和原型之間的關系 實例對象 實例對象中只有__proto__屬性,所有的實例都指向自己構造函數的原型。__proto__屬性裏面有構造器constructi
PHP.25-TP框架商城應用實例-後臺1-添加商品功能、鉤子函數、在線編輯器、過濾XSS、上傳圖片並生成縮略圖
引用傳遞 none move 名稱 textarea 如果 library time fields 添加商品功能 1、創建商品控制器【C】 /www.test.com/shop/Admin/Controller/GoodsController.class.php
【函數】02、匿名函數、生成器、高階函數
lambda一、匿名函數1、定義語法格式: lambda args:expression args:以逗號分隔的參數列表 expression:用到args中各參數的表達式 lambda定義的代碼必須是合法的表達式,不能出現多條件語句(可使用if的三元表達式)和非表達式,如f
python基礎之內置函數補充、匿名函數、遞歸函數
round if判斷 就會 ssi 如果 生成 code hello 定義 內置函數補充 python divmod()函數:把除數和余數運算結果結合起來,返回一個包含商和余數的元組(a // b, a % b) 語法: 1 divmod(a, b) #a、b為數字,a
可選參數、命名參數、.NET的特殊類型、特性
應用 傳輸 問題 運行 read company ria 隱式類型 dynamic 1、可選參數和命名參數 1.1可選參數 語法: [修飾符] 返回類型 方法名(必選參數n,可選參數n) 註意:
關於對象、構造函數、原型、原型鏈、繼承
mes 創建對象 light 表示 {} highlight col 面向 原型鏈 對象: 在傳統的面向過程的程序設計中,會造成函數或變量的冗余。而js中對象的目的是將所有的具有相同屬性或行為的代碼整合到一起,形成一個集合,這樣就會方便管理,例如: var person
C語言中 有符號數、無符號數、整數溢出 (轉)
alt 原因 () tar sig 重新 detail copyto 想象 [cpp] view plain copy print? #include<stdio.h> void main() { int l=-1; unsigned
python函數中的位置參數、默認參數、關鍵字參數、可變參數區別
pytho http cti 發現 位置 key strong 收集 python 一、位置參數 調用函數時根據函數定義的參數位置來傳遞參數。 #!/usr/bin/env python # coding=utf-8 def print_hello(name, sex)
JS高級. 02 面向對象、創建對象、構造函數、自定義構造函數、原型
浪費 truct 創建過程 spa const 使用 指向 找到 tro 面向對象的三大特性: 封裝 a) 把一些屬性和方法裝到一個對象裏 2. 繼承 a) js中的繼承是指: 一個對象沒有一些方法和屬性,而另一個對象有
布爾類型、操作符別名、C++函數、動態內存分配(newdelete)、引用(day02)
color 返回 void double 強制 也會 了解 關系 指針 六 C++的布爾類型 1 bool類型是C++中基本類型,專門表示邏輯值:true/false 2 bool在內存上占一個字節:1表示true,0表示false 3 bool類型可以接收任意類型和表達
dup、文件鎖、庫函數、函數調用(day07)
start 記錄 變參 new type hold tin 功能 返回值 一、lseek(2)重新定位文件的讀寫位置。 #include <sys/types.h> #include <unistd.h> off_t lseek(int fd,