接下来开始接触Lua强大的字符串处理能功能——字符串库。

  原始的Lua解释器操作字符串的能力很有限,真正强大的能力还是来自字符串库。

  它所有的函数都在模块string中。它还为strings设置了一个元表,__index域指向该string table。

  所以string.byte(s,i)可以使用s:byte(i)这种面向对象的写法。

  string.len(s)可以返回字符串s的长度;等价于 #s。

  string.rep(s, n) 或s:rep(n) 可以返回字符串s重复n次的结果:

string.rep("a", ^)    --创建1M的字符串

  string.lower(s) 可以返回一份s的副本,其中所有的大写字母都被转换成小写形式,其他字符不变。string.upper与之相反。

  比如对一个字符串数组排序,并且不区分大小写:

table.sort(a , function(a, b)
return a:lower() < b:lower()
end) -- or table.sort(a , function(a ,b)
return string.lower(a) < string.lower(b)
end)

  string.sub(s , i, j)可以从s中 截取第i个到第j个字符。Lua中第一个字符的索引是1。

  也可以使用负数作索引,这样就是从字符串尾部开始计数,-1表示最后一个字符,-2表示倒数第二个。

string.sub(s,, j)        -->得到字符串中长度为j的前缀。
s:sub(,j) -->同样得到字符串中长度为j的前缀。 string.sub(s , j, -) -->得到从第j个开始的后缀。
s:sub(j) -->也是得到第j个开始的后缀。 string.sub(s,,-)   -->可以返回字符串去掉第一个和最后一个字符的串
s = "[in brackets]"
print(s:sub(,-))   --> in brackets

  Lua中的字符串是不可变的,和Lua中所有其他函数一样,string.sub不会改变字符串的值,只会返回一个新字符串:

string.sub(s ,  , -)        -- 光这样是不能改变s的值的
s = string.sub(s , , -) -- 这样s的值才会改变

  string.char和string.type是用于转换字符及其内部数值表示。前者接受0或多个整数,并将每个整数转换成对应的字符,然后返回一个字符串。

print(string.char())        --> a
i = ;print(string.char(i , i+ , i+ )) -->abc

  string.byte(s , i )返回字符串s中第i个字符的内部数值表示,它的第二个参数是可选的;

  调用string.byte(s)可返回字符串s总第一个字符的内部数值表示:

print(string.byte("abc"))       --> 97
print(string.byte("abc",)) --> 98
print(string.byte("abc",-)) --> 99

  string.byte(s , i , j)可以返回索引i到j之间的所有字符的内部表示值。

print(string.byte("abc",  ,  ))   --> 97 98

  j 的默认值是 i ,如果不指定j,就只返回第 i 个字符的值。

  有一中习惯写法是:

{s:byte( , - ) }

  这种写法会创建一个table,其中包含了s中所有字符的编码。然后可以用string.char(unpack(t))来重建原字符串。

但是由于Lua限制了函数的返回值数量,所有这项技术无法用于较长的字符串(大于1MB)。

  stirng.format用于格式化字符串的利器,常用在输出上。它会根据第一个参数的描述,返回后续其他参数的格式化版本,这第一个参数也称为“格式化字符串”。编写格式化字符串的规则与标准C中printf函数相同。

一个由字符“%”加上一个字母组成,字母有:

d  用于十进制

x  用于十六进制

o  用于八进制

f  用于浮点数

s  用于字符串

此外,在%与字母之间还可以再指定一些其他选项:

print(string.format("pi %.4f ",math.pi))        --> pi = 3.1416  表示一个小数点后有4位
d = ;m = ; y =
print(string.format("%02d/%02d/%04d",d , m ,y)) --> 05/11/1990  02表示一个十进制数至少2位,不足用0凑。 %2d 表示用空格来凑。
tag , title = "h1" , "a title"
print(string.format("<%s>%s</%s>", tag , title , tag ))
--> <h1>a title</h1>

以上内容来自:《Lua程序设计第二版》和《Programming in Lua  third edition 》

Chapter 21_1 字符串函数的更多相关文章

  1. ThinkPHP 模板substr的截取字符串函数

    ThinkPHP 模板substr的截取字符串函数在Common/function.php加上以下代码 /** ** 截取中文字符串 **/ function msubstr($str, $start ...

  2. SQL字符串函数

    LEN() :计算字符串长度(字符的个数.)datalength();//计算字符串所占用的字节数,不属于字符串函数.测试varchar变量与nvarchar变量存储字符串a的区别.见备注1.LOWE ...

  3. Python3中的字符串函数学习总结

    这篇文章主要介绍了Python3中的字符串函数学习总结,本文讲解了格式化类方法.查找 & 替换类方法.拆分 & 组合类方法等内容,需要的朋友可以参考下. Sequence Types ...

  4. TSQL 字符串函数:截断和查找

    字符串截断函数是指:Stuff 和 SubString,字符串查找函数是:CharIndex 和 PatIndex 一,SubString 截取子串 最常用的字符串函数,用于截取特定长度的子串. SU ...

  5. c#编程基础之字符串函数

    c#常用的字符串函数 例一: 获取字符串的大小写函数 ToLower():得到字符串的小写形式 ToUpper():得到字符串的大写形式 注意: 字符串时不可变的,所以这些函数都不会直接改变字符串的内 ...

  6. SQLSERVER常见系统函数之字符串函数(一)

    好久没有写博客了,这段时间准备写一下字符串函数 QQ群: 499092562:欢迎交流 字符串函数: 1.LEN(需要获取长度的字符串) 返回:字符串的长度 示例: SELECT LEN('小搬运工很 ...

  7. python笔记-字符串函数总结

    字符串函数: chr() 数字转ASCII chr(96)="a" ord() ASCII转数字 ord("a")=96 isspace() 判断是否为空格 s ...

  8. Sql Server函数全解<一>字符串函数

    阅读目录 1.ASCII()函数 2.CHAR()函数 3.LEFT()函数 4.RIGHT()函数 5.LTRIM()函数 6.RTRIM()函数 7.STR()函数 8.字符串逆序的函数REVER ...

  9. Sql Server系列:字符串函数

    字符串函数用于对字符和二进制字符串进行各种操作,大多数字符串函数只能作用于char.nchar.varchar和nvarchar数据类型.字符串函数可以用在SELECT或者WHERE语句中. 1. A ...

随机推荐

  1. C# 根据时间创建文件夹

    string file = ((fileNameIndex)index).ToString(); if (!Directory.Exists(HttpContext.Current.Server.Ma ...

  2. GitHub创建SSH Keys

    第一步:在用户主目录下,看有没有.ssh目录,如果有,再看看这个目录下 有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步,如果没有 打开Git Bash,创建SSH ...

  3. TaskTracker执行map或reduce任务的过程2

    TaskTracker执行map或reduce任务的过程(二) 上次说到,当MapLauncher或ReduceLancher(用于执行任务的线程,它们扩展自TaskLauncher),从它们所维护的 ...

  4. HTML + Javascript开发AIR应用

    HTML + Javascript开发AIR应用 目录 背景什么是AIR?环境准备运行效果开发过程目录结构应用程序描述符HTML页面调试备注 背景返回目录 断断续续用Winform和WPF开发过一些小 ...

  5. 鸟哥的LINUX私房菜基础篇第三版 阅读笔记 四 档案的文件系统的压缩和打包

    1.压缩文件案的用途与技术     a.用途,简单来说,就是节约磁盘空间.如果从传输角度讲,占用宽带也会小很多(Apache就有自动压缩的功能,节省宽带资源,提升网站的输出能力)     b.压缩技术 ...

  6. jquery animate 详解

    一.前言 继上一篇文章jquery stop的探索之后,我们继续对jquery动画animate的研究. 从stop给出参数我们就知道,它适合你去立即停止或者立即结束当前动画,清除或者继续非当前的动画 ...

  7. PHP使用DomDocument抓取HTML内容

    有时候会有需要从一个HTML页面来分离出你需要的一些数据来进行处理. 当然自己分析文件肯定可以,但是比较快速且方便的是使用正则表达式或者DOM. 鉴于正则表达式我不熟悉,所以我打算使用DOM来完成. ...

  8. HDOJ 1755 - A Number Puzzle 排列数字凑同余,状态压缩DP

    dp [ x ] [ y ] [ z ] 表示二进制y所表示的组合对应的之和mod x余数为z的最小数... 如可用的数字为 1 2 3 4...那么 dp [ 7 ] [ 15 ] [ 2 ] = ...

  9. 64win7+64Oracle+32plsql

    1)安装Oracle 11g 64位   2)安装32位的Oracle客户端( instantclient-basic-win32-11.2.0.1.0) 下载instantclient-basic- ...

  10. ASM上的备份集如何转移到文件系统中

    刚看到一个有关asm备份集的迁移的问题.特地整理了一下 方法有两个. 方法一:使用rman,rman是一个非常好的工具,不仅仅是备份的作用,如果你只用rman作备份的话,有些浪费了. 通过rman里的 ...