lua string方法拓展
--[[--
用指定字符或字符串分割输入字符串,返回包含分割结果的数组
local input = "Hello,World"
local res = string.split(input, ",")
-- res = {"Hello", "World"} local input = "Hello-+-World-+-Quick"
local res = string.split(input, "-+-")
-- res = {"Hello", "World", "Quick"} @param string input 输入字符串
@param string delimiter 分割标记字符或字符串
@return array 包含分割结果的数组
]]
function string.split(input, delimiter)
input = tostring(input)
delimiter = tostring(delimiter)
if (delimiter=='') then return false end
local pos,arr = , {}for st,sp in function() return string.find(input, delimiter, pos, true) end do
table.insert(arr, string.sub(input, pos, st - ))
pos = sp +
end
table.insert(arr, string.sub(input, pos))
return arr
end --[[--
去除输入字符串头部的空白字符,返回结果
local input = " ABC"
print(string.ltrim(input))
-- res ABC,输入字符串前面的两个空格被去掉了 空白字符包括:
- 空格
- 制表符 \t
- 换行符 \n
- 回到行首符 \r
@param string input 输入字符串
@return string 结果
@see string.rtrim, string.trim
]]
function string.ltrim(input)
return string.gsub(input, "^[ \t\n\r]+", "")
end
--[[--
去除输入字符串尾部的空白字符,返回结果
local input = "ABC "
print(string.ltrim(input))
-- res ABC,输入字符串最后的两个空格被去掉了 @param string input 输入字符串
@return string 结果
@see string.ltrim, string.trim ]]
function string.rtrim(input)
return string.gsub(input, "[ \t\n\r]+$", "")
end
--[[--
去掉字符串首尾的空白字符,返回结果
@param string input 输入字符串
@return string 结果
@see string.ltrim, string.rtrim
]]
function string.trim(input)
input = string.gsub(input, "^[ \t\n\r]+", "")
return string.gsub(input, "[ \t\n\r]+$", "")
end --[[--
将字符串的第一个字符转为大写,返回结果
local input = "hello"
print(string.ucfirst(input))
-- res Hello
@param string input 输入字符串
@return string 结果
]]
function string.ucfirst(input)
return string.upper(string.sub(input, , )) .. string.sub(input, )
end--[[--
计算 UTF8 字符串的长度,每一个中文算一个字符
local input = "你好World"
print(string.utf8len(input))
-- res 7
@param string input 输入字符串
@return integer 长度
]]
function string.utf8len(input)
local len = string.len(input)
local left = len
local cnt =
local arr = {, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc}
while left ~= do
local tmp = string.byte(input, -left)
local i = #arr
while arr[i] do
if tmp >= arr[i] then
left = left - i
break
end
i = i -
end
cnt = cnt +
end
return cnt
end
----过滤出规范字符 只保留汉字、数字、字符
function string.filterSpecChars(s)
local ss = {}
local k =
while true do
if k > #s then break end
local c = string.byte(s,k)
if not c then break end
if c< then
if (c>= and c<=) or (c>= and c<=) or (c>= and c<=) then
table.insert(ss, string.char(c))
end
k = k +
elseif c< then
k = k +
elseif c< then
if c>= and c<= then
local c1 = string.byte(s,k+)
local c2 = string.byte(s,k+)
if c1 and c2 then
local a1,a2,a3,a4 = ,,,
if c == then a1 =
elseif c == then
a2,a4 = ,c1 ~= and or
end
if c1>=a1 and c1<=a2 and c2>=a3 and c2<=a4 then
table.insert(ss, string.char(c,c1,c2))
end
end
end
k = k +
elseif c< then
k = k +
elseif c< then
k = k +
elseif c< then
k = k +
end
end
return table.concat(ss)
end
--[[--
将数值格式化为包含千分位分隔符的字符串
print(string.formatnumberthousands())
-- 输出 ,, @param number num 数值
@return string 格式化结果
]]
function string.formatnumberthousands(num)
local formatted = tostring(checknumber(num))
local k
while true do
formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1,%2')
if k == then break end
end
return formatted
end
-- 判断utf8字符byte长度
-- 0xxxxxxx - byte
-- 110yxxxx - , byte
-- 1110yyyy - , byte
-- 11110zzz - , byte
local function chsize(char)
if not char then
print("not char")
return
elseif char > then
return
elseif char > then
return
elseif char > then
return
else
return
end
end -- 截取utf8 字符串
-- str: 要截取的字符串
-- startChar: 开始字符下标,从1开始
-- numChars: 要截取的字符长度
function string.utf8sub(str, startChar, numChars)
local startIndex =
while startChar > do
local char = string.byte(str, startIndex)
startIndex = startIndex + chsize(char)
startChar = startChar -
end local currentIndex = startIndex while numChars > and currentIndex <= #str do
local char = string.byte(str, currentIndex)
currentIndex = currentIndex + chsize(char)
numChars = numChars -
end
return str:sub(startIndex, currentIndex - )
end
--判断字符串是否为nil或““
function string.IsNilOrEmpty(str)
if not str or str == "" then
return true
end
return false
end
lua string方法拓展的更多相关文章
- Lua string库整理
string库提供了字符串处理的通用函数. 例如字符串查找.子串.模式匹配等. 当在 Lua 中对字符串做索引时,第一个字符从 1 开始计算(而不是 C 里的 0 ). 索引可以是负数,它指从字符串末 ...
- Javascript中双等号(==)隐性转换机制 JS里charCodeAt()和fromCharCode()方法拓展应用:加密与解密
Javascript中双等号(==)隐性转换机制 在Javascript中判断相等关系有双等号(==)和三等号(===)两种.其中双等号(==)是值相等,而三等号(===)是严格相等(值及类型是否 ...
- JavaScript学习笔记-用于模式匹配的String方法
用于模式匹配的String方法: String支持4种使用正则表达式的方法: seach()用于检索,参数是一个正则表达式,返回第一个与之匹配的子串的位置,找不到则返回-1,如 ...
- 在String()构造器不存在的情况下自定义一个MyString()函数,实现如下内建String()方法和属性:
在String()构造器不存在的情况下自定义一个MyString()函数,实现如下内建String()方法和属性: var s = new MyString("hello"); s ...
- ES6 数组方法拓展
ES6 数组方法拓展 1.Array.from() Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括E ...
- 【Java】Java中常用的String方法
本文转载于:java中常用的String方法 1 length()字符串的长度 String a = "Hello Word!"; System.out.println(a.len ...
- (转 )Unity对Lua的编辑器拓展
转 http://blog.csdn.net/ZhangDi2017/article/details/61203505 当前版本的Unity(截至Unity5.5.x)中TextAsset类不支持后缀 ...
- 用来生成get set string 方法
https://projectlombok.org/ 主要是用来生成get set string 方法等等 原理是注解
- Ruby字符串(2):String方法详细整理
String方法整理 官方手册 类方法 new new(str="") → new_str new(str="", encoding: enc) → new_s ...
随机推荐
- HashMap 底层探索
其实HashMap就是一个Node数组,只是这个数组很奇怪它的每一个Node节点都有自己的下一个Node;这个是hashMap的Node的源码: static class Node<K,V> ...
- B. Marvolo Gaunt's Ring 前缀后缀
B. Marvolo Gaunt's Ring 这种一般只有三个的都可以处理前缀和后缀,再枚举中间这个值. 这个和之前写过的C. Four Segments 前缀后缀 处理方式很像. #include ...
- AbstractList源码分析
AbstractList 1 类图 2 字段 // 默认容量 private static final int DEFAULT_CAPACITY = 10; // 共享的空数组 private sta ...
- [hdu1317]spfa
题意:给一个有向图,每个点有一个权值,从1个点出发,初始能量有100,每到达新的点,能量就会加上那个点的权值,当能量大于0时才能继续走,可以多次进入同一点.问能否到达目标点 思路:如果没正权环,则直接 ...
- 放大镜功能 JS原生写法
********** 希望对大家帮助 我会继续努力的 如果有不对的地方请大家帮忙指出****** 1 [JS 代码] <script> var oBox = document.getEle ...
- 推荐 10个 NB的 IDEA 插件,开发效率至少提升一倍
友情提示:插件虽好,可不要贪装哦,装多了会 卡 .卡 .卡 ~ 正经干活用的 分享一点自己工作中得心应手的IDEA插件,可不是在插件商店随随便便搜的,都经过实战检验,用过的都说好.可能有一些大家用过的 ...
- 微信浏览器中禁止下拉出现网页由xxx.xxxxx.com提供,QQ浏览器X5内核提供技术支持这个
直接上代码 window.onload = function(){ document.body.addEventListener('touchmove', function (e) { e.preve ...
- ABP框架踩过的坑系列6
ABP框架踩过的坑系列6 应是无事.齐侯方才的确到了吴纠庭院https://www.mixcloud.com/ltTFvU888smi8jS/几日行军劳顿其实齐侯本应该睡下了https://www.m ...
- uwsgi模块以参数形式运行项目
1.虚拟环境中下载uwsgi模块-------pip install uwsgi 2.脚本运行案例 新建一个test.py脚本文件,写入如下内容: def application(env, start ...
- python之pytest框架实现
一.pytest测试框架简介: pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点: 简单灵活,容易上手 支持参数化 能够支持简单的单元测试和复杂的功能测试,还可以用来做se ...