lua字符串对齐函数
最近要用到字符串对齐,开始只是一部分字符串,就直接加空格了,后来发现有很多,
于是写了个字符串对齐的函数。
--功能:分割字符串
--参数:带分割字符串,分隔符
--返回:字符串表
function string.split(str, delimiter)
str = tostring(str)
delimiter = tostring(delimiter)
if (delimiter=='') then return false end
local pos,arr = , {}
-- for each divider found
for st,sp in function() return string.find(str, delimiter, pos, true) end do
table.insert(arr, string.sub(str, pos, st - ))
pos = sp +
end
table.insert(arr, string.sub(str, pos))
return arr
end --功能:统计字符串中字符的个数
--返回:总字符个数、英文字符数、中文字符数
function string.count(str)
local tmpStr=str
local _,sum=string.gsub(str,"[^\128-\193]","")
local _,countEn=string.gsub(tmpStr,"[%z\1-\127]","")
return sum,countEn,sum-countEn
end
--功能:计算字符串的宽度,这里一个中文等于两个英文
function string.width(str)
local _,en,cn=string.count(str)
return cn*+en
end -- 功能: 把字符串扩展为长度为len,居中对齐, 其他地方以filledChar补齐
-- 参数: str 需要被扩展的字符、数字、字符串表,len 被扩展成的长度,
-- filledChar填充字符,可以为空
function string.tocenter(str, len, filledChar)
local function tocenter(str,len,filledChar)
str = tostring(str);
filledChar = filledChar or " ";
local nRestLen = len - string.width(str); -- 剩余长度
local nNeedCharNum = math.floor(nRestLen / string.width(filledChar)); -- 需要的填充字符的数量
local nLeftCharNum = math.floor(nNeedCharNum / ); -- 左边需要的填充字符的数量
local nRightCharNum = nNeedCharNum - nLeftCharNum; -- 右边需要的填充字符的数量 str = string.rep(filledChar, nLeftCharNum)..str..string.rep(filledChar, nRightCharNum); -- 补齐
return str
end
if type(str)=="number" or type(str)=="string" then
if not string.find(tostring(str),"\n") then
return tocenter(str,len,filledChar)
else
str=string.split(str,"\n")
end
end
if type(str)=="table" then
local tmpStr=tocenter(str[],len,filledChar)
for i=,#str do
tmpStr=tmpStr.."\n"..tocenter(str[i],len,filledChar)
end
return tmpStr
end end
-- 功能: 把字符串扩展为长度为len,左对齐, 其他地方用filledChar补齐
function string.toleft(str, len, filledChar)
local function toleft(str, len, filledChar)
str = tostring(str);
filledChar = filledChar or " ";
local nRestLen = len - string.width(str); -- 剩余长度
local nNeedCharNum = math.floor(nRestLen / string.width(filledChar)); -- 需要的填充字符的数量 str = str..string.rep(filledChar, nNeedCharNum); -- 补齐
return str;
end
if type(str)=="number" or type(str)=="string" then
if not string.find(tostring(str),"\n") then
return toleft(str,len,filledChar)
else
str=string.split(str,"\n")
end
end
if type(str)=="table" then
local tmpStr=toleft(str[],len,filledChar)
for i=,#str do
tmpStr=tmpStr.."\n"..toleft(str[i],len,filledChar)
end
return tmpStr
end
end
-- 功能: 把字符串扩展为长度为len,右对齐, 其他地方用filledChar补齐
function string.toright(str, len, filledChar)
local function toright(str, len, filledChar)
str = tostring(str);
filledChar = filledChar or " ";
local nRestLen = len - string.width(str); -- 剩余长度
local nNeedCharNum = math.floor(nRestLen / string.width(filledChar)); -- 需要的填充字符的数量 str = string.rep(filledChar, nNeedCharNum).. str; -- 补齐
return str;
end
if type(str)=="number" or type(str)=="string" then
if not string.find(tostring(str),"\n") then
return toright(str,len,filledChar)
else
str=string.split(str,"\n")
end
end
if type(str)=="table" then
local tmpStr=toright(str[],len,filledChar)
for i=,#str do
tmpStr=tmpStr.."\n"..toright(str[i],len,filledChar)
end
return tmpStr
end
end --测试代码
print("对齐测试\n")
print(string.tocenter(string.split("居中cc\n居中","\n"),*,"*"))
print(string.tocenter("居中cc\n居中",*))
print("\n")
print(string.toright(string.split("居右rr\n居右","\n"),*,"*"))
print(string.toright("居右rr\n居右",*))
print("\n")
print(string.toleft(string.split("居左ll\n居左","\n"),*,"*"))
print(string.toleft("居左ll\n居左",*))
另外附三个trim(删除控制字符)函数
function string.ltrim(str)
return string.gsub(str, "^[ \t\n\r]+", "")
end function string.rtrim(str)
return string.gsub(str, "[ \t\n\r]+$", "")
end function string.trim(str)
str = string.gsub(str, "^[ \t\n\r]+", "")
return string.gsub(str, "[ \t\n\r]+$", "")
end
其中,string.split、及三个trim均取自quick-cocos2d-x中的functions.lua,
三个对齐函数,修改自网上,以支持中文、字符串表、换行的字符串。
lua字符串对齐函数的更多相关文章
- lua字符串分割函数[适配中文特殊符号混合]
lua的官方函数里无字符串分割,起初写了个简单的,随之发现如果是中文.字符串.特殊符号就会出现分割错误的情况,所以就有了这个zsplit. function zsplit(strn, chars) f ...
- Lua 字符串查找函数 string.find(s, pattern [, init [, plain]] )【转】
函数原型 string.find(s, pattern [, init [, plain]] ) s: 源字符串 pattern: 待搜索模式串 init: 可选, 起始位置 plain: 我没用过 ...
- Lua字符串库(整理)
Lua字符串库小集 1. 基础字符串函数: 字符串库中有一些函数非常简单,如: 1). string.len(s) 返回字符串s的长度: 2). string.rep(s,n) 返回 ...
- 飘逸的python - 增强的格式化字符串format函数
自python2.6开始,新增了一种格式化字符串的函数str.format(),可谓威力十足.那么,他跟之前的%型格式化字符串相比,有什么优越的存在呢?让我们来揭开它羞答答的面纱. 语法 它通过{}和 ...
- lua二进制操作函数
由于 Lua 脚本语言本身不支持对数字的二进制操作(例如 与,或,非 等操作),MUSHclient 为此提供了一套专门用于二进制操作的函数,它们都定义在一个“bit”表中,使用时只要requre “ ...
- Python内置的字符串处理函数整理
Python内置的字符串处理函数整理 作者: 字体:[增加 减小] 类型:转载 时间:2013-01-29我要评论 Python内置的字符串处理函数整理,收集常用的Python 内置的各种字符串处理 ...
- 《Python CookBook2》 第一章 文本 - 测试一个对象是否是类字符串 && 字符串对齐
测试一个对象是否是类字符串 任务 有时候需要测试一个对象,尤其是当你在写一个函数或者方法的时候,经常需要测试传入的参数是否是一个字符串. 解决方案 利用内建的isinstance 和basestrin ...
- Python 的格式化字符串format函数
阅读mattkang在csdn中的博客<飘逸的python - 增强的格式化字符串format函数>所做笔记 自从python2.6开始,新增了一种格式化字符串的函数str.format( ...
- 强大的字符串格式化函数 - format
自python2.6开始,新增了一种格式化字符串的函数str.format(),它通过{}和:来代替% 位置方法格式化 >>>'{}-{}'.format('simon','ting ...
随机推荐
- 纯CSS(无 JavaScript)实现的响应式图像显示
有许多方法可以实现web页面里图像的应答.然而,我碰到的所有方案都使用了JavaScript.这使我疑惑不用JavaScript实现图像响应是否可行. 我提出了下面纯CSS的方案. 它是如何工作的呢? ...
- ssh 的安装
新安装的ubuntu 虚拟机,没有ssh时(ssh 连接不上),时ssh服务没装. 安装openssh-server,就可以. ------------------------------------ ...
- Git使用sublime_text作用默认编辑器
Git使用的是Vim来作用默认的编辑器,但一直都用不好这个编辑器,所以打算把他换成sublime_text 使用windows默认的记事本 git config --global core.edito ...
- QPS、RT、PV、UV之间的关系
QPS: 每秒查询率(Query Per Second) ,每秒的响应请求数,也即是最大吞吐能力. QPS = req/sec = 请求数/秒 QPS统计方式 [一般使用 http_load 进行统计 ...
- Bash Shell的环境配置文件
login shell:取得bash时需要完整的登录流程 non-login shell:取得bash接口的方法不需要重复登录,举例来说,你以x window登录Linux后,再以x的图形界面启动终端 ...
- SpringMVC日期类型转换问题处理方法归纳
前言 我们在SpringMVC开发中,可能遇到比较多的问题就是前台与后 台实体类之间日期转换处理的问题了,说问题也不大,但很多人开发中经常会遇到这个问题,有时很令人头疼,有时间问题暴露的不是很明显,然 ...
- ScheduledThreadPoolExecutor的scheduleAtFixedRate方法探究
ScheduledThreadPoolExecutor除了具有ThreadPoolExecutor的所有功能外,还可以延迟执行任务或者周期性的执 行某个任务.scheduleWithFixedDela ...
- IO核心代码
- Be Happy.——我的ACM退役贴
一个月的忙碌后,最终能静下心来写一些什么. 该结束的最终都要结束了.考试,课程设计,所剩寥寥无几的大学时光,ACM. 看过不少大牛的退役贴,自嘲成银牌狗铜牌狗.写一写碎碎念,大抵如此,每一个人都无法落 ...
- 基于Scrapy框架的Python新闻爬虫
概述 该项目是基于Scrapy框架的Python新闻爬虫,能够爬取网易,搜狐,凤凰和澎湃网站上的新闻,将标题,内容,评论,时间等内容整理并保存到本地 详细 代码下载:http://www.demoda ...