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 ...
随机推荐
- .net平台借助第三方推送服务在推送Android消息(极光推送)
最近做的.net项目(Windows Service)需要向Android手机发送推送消息,真是有点困难,没有搞过就不停的搜文档,最后看到了一个开源项目PushSharp,可以在.net平台推送IOS ...
- 线程本地存储TLS(Thread Local Storage)的原理和实现——分类和原理
本文为线程本地存储TLS系列之分类和原理. 一.TLS简述和分类 我们知道在一个进程中,所有线程是共享同一个地址空间的.所以,如果一个变量是全局的或者是静态的,那么所有线程访问的是同一份,如果某一个线 ...
- Android -- Activity的销毁和重建
两种销毁 第一种是正常的销毁,比如用户按下Back按钮或者是activity自己调用了finish()方法: 另一种是由于activity处于stopped状态,并且它长期未被使用,或者前台的acti ...
- android KK版本号收到短信后,点亮屏的操作
alps/packages/apps/mms/src/comandroid\mms\transation\MessagingNotification.java private static void ...
- UVA 10620 - A Flea on a Chessboard(鸽笼原理)
UVA 10620 - A Flea on a Chessboard 题目链接 题意:给定一个跳蚤位置和移动方向.如今在一个国际象棋棋盘上,左下角为黑格,一个格子为s*s,推断是否能移动到白格子.问要 ...
- Python标准库:内置函数dict(mapping, **kwarg)
本函数是从一个映射函数对象构造一个新字典. 与dict(**kwarg)函数不一样的地方是參数输入是一个映射类型的函数对象,比方zip函数.map函数. 样例: #dict() #以键对方式构造字典 ...
- Python 字符串与数字拼接报错
Python 不像 JS 或者 PHP 这种弱类型语言里在字符串连接时会自动转换类型,而是直接报错. 如: 上述是Python 字符串与数字拼接报错,解决办法是:使用bytes函数把int型转换为st ...
- IIS发布.net core mvc web站点
这里只有操作步骤! 第一.查看IIS是否安装了 AspNetCoreModule,查看路径:IIS->模块 查看 安装步骤 下载网址:https://www.microsoft.com/net/ ...
- angularjs requeirjs配置相关
尝试了网上的yeoman generator 生成的脚手架项目不甚理想 npm install -g generator-angular-require yo angular-require 就不用那 ...
- Chrome 浏览器端口的坑:ERR_UNSAFE_PORT
nodejs 启动了一个6000端口的服务 本来是打算测试用的,结果一直报以下错误 但我使用 curl 来请求该接口地址是正常的.这就很纳闷了. 经过一番折腾无果之后,百度才知道.这个6000端口是非 ...