string:
1. string.lower(s): 接收一个字符串,然后返回一个将字符串转换为小写字母的字符串副本,除此之外的其他字符不会被改变,大写字母的定义依赖于当前的本地设置。
2. string.gsub() 替换
3. string.sub 函数从line中提取两个位置参数之间的子串
4. string.format 用来对字符串进行格式化的时候,特别是字符串输出,第一个参数为格式化串:由指示符和控制格式的字符组成。指示符后的控制格式的字符可以为:十进制'd';十六进制'x';八进制'o';浮点数'f';字符串's'。在指示符'%'和控制格式字符之间还可以其他的项:用来控制更详细的格式,比如一个浮点数的小数的位数
5、虽然lua中字符串拼接“string.format”相对于“..”消耗较大,但有时为了代码的可读性,项目中还是经常用到“string.format”。至于这两个用法的性能看源码也很容易看出来,这里就简单说一下,前者其实调用C函数str_format来实现拼接的,而后者只是一个操作符,通过memcpy来拼接,并且多个“..”的操作其实也只执行了一次concat。
常用转义符:
%c - 接受一个数字, 并将其转化为ASCII码表中对应的字符
%d, %i - 接受一个数字并将其转化为有符号的整数格式
%o - 接受一个数字并将其转化为八进制数格式
%u - 接受一个数字并将其转化为无符号整数格式
%x - 接受一个数字并将其转化为十六进制数格式, 使用小写字母
%X - 接受一个数字并将其转化为十六进制数格式, 使用大写字母
%e - 接受一个数字并将其转化为科学记数法格式, 使用小写字母e
%E - 接受一个数字并将其转化为科学记数法格式, 使用大写字母E
%f - 接受一个数字并将其转化为浮点数格式
%g(%G) - 接受一个数字并将其转化为%e(%E, 对应%G)及%f中较短的一种格式
%q - 接受一个字符串并将其转化为可安全被Lua编译器读入的格式
%s - 接受一个字符串并按照给定的参数格式化该字符串
实用扩展:
对于“string.format”的使用,转义符的使用也是有部分技巧。
1)string.format中怎么匹配带%的的字符串和转义符的使用
string.format("%d%%", 100) 输出: 100%
string.format("\"%s\"", "Hello World") 输出: "Hello World"
2)常用的格式控制符
可以在%号后添加参数. 参数将以如下的顺序读入:
(1) 符号: 一个+号表示其后的数字转义符将让正数显示正号. 负数不变.
(2) 占位符: 一个0, 在后面指定了字串宽度时占位用. 默认占位符是空格.
(3) 对齐标识: 在指定了字串宽度时, 默认为右对齐, 增加-号可以改为左对齐.(用于一些自动空格地方)
(4) 宽度数值 .小数位数/字串裁切: 在宽度数值后增加的小数部分n, 若后接f则设定该浮点数的小数只保留n位, 若后接s则设定该字符串只显示前n位.
string.format("%05d", 2015) 输出: 02015
string.format("%+04d", -2015) 输出: -2015
string.format("%+04d", 2015) 输出: +2015
string.format("%.5f", math.pi) 输出: 3.14159
string.format("%.8f", 0.123456789) 输出: 0.12345679 (这里可以看到第八位变成了9而不是8,其实是做了一个四舍五入操作)
string.format("%.4s", "canglang") 输出: cang
string.format("%8.4s", "canglang") 输出: cang
****************************************************
1、语句结尾分号(;)可选。
2、同行多个语句建议分号隔开
3、chunk:块,交互式模式下,lua将每一行当作一个chunk执行
4、lua –la –lb 命令先执行a,后执行b(-l选项:会调用require,将在指定目录下搜索文件)
5、lua –i –la –lb 将在一个chunk内执行a,后执行b,最后直接进入交互模式
6、dofile()函数:加载文件并执行,例:dofile(“t1.lua”)
7、全局变量:不需要声明,给变量赋值即可创建,不初始化则为空(nil),删除一个变量,将其赋值为nil即可
8、lua大小写敏感
9、单行注释:--
10、多行注释:--[[ --]]
11、lua保留字:and break do else elseif end false for
function if in local nil not or repeat
return then true until while
12、lua中8个基本类型:nil、boolean、number、string、userdata、function、thread和table
13、type()函数:测定给定变量或值的类型
14、boolean:true和false,lua中所有值均可作为条件,false和nil为假,其他均为真(包括0和空串)
15、number:实数。
16、string:字符的序列。lua自动进行内存分配和释放。单引号和双引号均可表示字符串。
17、lua字符串中的转义序列:\a \b(后退) \f(换页) \n(换行) \r(回车) \t(制表) \v \\("\") \"(双引号)
\'(单引号) \[(左中括号) \](右中括号)
18、[[...]] 表示字符串,这种形式的字符串可以包含多行,可以嵌套且不会解释转义序列,如果第一个字符是换行符会被自动忽略掉。这种形式的字符串用来包含一段代码是非常方便的
例:
page = [[
<HTML>
<HEAD>
<TITLE>An HTML Page</TITLE>
</HEAD>
<BODY>
Lua
[[a text between double brackets]]
</BODY>
</HTML>
]]
19、lua中,string和numbers之间可以自动进行类型转换(在进行算数运算时)
20、".."两点在lua中是字符串连接符,数字后面写“..”必须加空格
21、字符串与数字可互相转换,但并不表示相同,10 == "10",这种比较是错的。
22、tonumber()函数可以将string转换成数字。
23、tostring()函数将数字转换成字符串。
24、函数可以存储在变量中,可作为函数参数,也可作为函数返回值。
25、lua可调用lua实现的函数,也可调用C实现的函数。
26、lua所有标准库均由C实现,包括string库、table库、I/O库、OS库、算术库、debug库。
27、lua中不等于用~=表示
28、nil只和自己相等
29、lua比较数字按传统的数字大小进行比较,比较字符串按字母顺序进行,例:"2"<"15"---->false(因为是按字母顺序排序)
30、逻辑运算符:and or not,false和nil为假,其他(包括0)为真
31、a and b ---若a为false,返回a,否则返回b
32、a or b ---若a为true,返回a,否则返回b --->用法:x=x or v,若x为false或nil,则给x赋初值
lua中的and、or并不是返回true和false
not怎刚好相反,只返回true和false
33、and优先级高于or
34、连接运算符:.. 连接两个字符串:"hello".."world" ---> "hello world"
35、^为幂运算符
36、表:tab = {"","",""}
37、lua使用local创建局部变量,访问局部变量的速度比全局变量更快。
38、条件控制语句:
(1)
if * then
***
end;
(2)
if * then
***
else
***
end;
(3)
if * then
***
elseif * then
***
...
else
***
end;
39、循环控制语句:
(1)while:
while * do
***;
end;
(2)until:
repeat
***;
until *;
(3)for:
40、变量名没有类型,值才有类型。
41、lua提供唯一一种数据结构:table(表),混合了数组、哈希,可以用任何类型的值作为key和value。
42、boolean(布尔值):true/false。lua中nil和false为“假”,其他所有值均为“真”。
43、数学函数math.floor(*)向下取整(取第一个比*小的整数)和math.ceil(*)向上取整(取第一个比*大的整数)
44、字符串表示方式:''、""、[[ ]] 或 [=[ ]=] ...表示
45、lua字符串不可变,要修改时,需要创建新字符串,同时也不能通过下标来访问字符串的某个字符。
46、相同的lua字符串在lua虚拟机中,只存储一份。每一个lua字符串在创建时都会插入到lua虚拟机内部的一个全局的哈希表中。
47、local corp = {
web = "www.google.com", --->索引(key)为web, value为"www.google.com"
telephone = "12345678", --->索引(key)为telephone value为"12345678"
staff = {"Jack","Scott","Gary"}, --->索引(key)为staff value为"Jack","Scott","Gary" staff中三个字符串的索引分别为1、2、3
100876, --->索引(key)为1 value为100876
100191, --->索引(key)为2 value为100191
[10] = 360, --->索引(key)为10 value为360
["city"] = "Beijing" --->索引(key)为"city" value为"Beijing"
}
48、lua中,函数也是一种数据类型,函数可以存储在变量中,可以通过参数传递给其他函数,还可以作为其他函数的返回值。
49、lua中,相同内容的字符串只会保存一份,因此字符串之间的相等性比较可以简化为起内部存储地址的比较。这意味着lua字符串的想等性比较总是O(1)。而在其他编程语言中,字符串的想等下比较则通常为O(n),即需要逐个字节进行比较。
50、.. 连接操作符只会创建一个新字符串,而不会改变原操作数。也可以使用string库函数,string.format连接字符串。
注意 .. 连接操作符,两边需要加空格
51、连接字符串的其他方法:
(1)str1 = string.format("%d-%s%.2f",123,"world",1.21)
print(str1) --------->123-world1.21-------->format的第一参数规定了连接字符串的形式,必须得加,不然只会打印第一个参数值
(2)table.concat(table,sep,start,end):连接table中,从start开始,end结束,以sep为分隔符的元素。其中元素table为必须的,其他可选,默认sep为空字符,start为1,end为table的总长。
52、if语句
(1)单个if else语句
if * then
*
else
*
end
(2)多个if else语句
if * then
*
elseif * then
*
else
*
end
(3)嵌套if else语句
if * then
*
else
if * then
*
else
*
end
end
53、while语句,提供break提出当前循环
while * do
****
end
54、repeat语句,类似于do-while,执行repeat循环体后,直到until的条件为真时,循环结束。break语句同样可用
repeat
***
until false
55、for语句
(1)数字for,var从begin变化到finish, 步长为step;begin、finish、step三个表达式只会在循环开始时执行一次;step表达式可选,默认为1
for var = begin, finish, step do
***
end
(2)for泛型,使用迭代器遍历
****************************************************
math:
|
请发表评论