UH2S1L3——字符串操作
本章代码关键字
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #str "\n"
[[多行 字符串 ]] .. string.format() tostring() string.upper() string.lower() string.reverse() string.find() string.sub() string.rep() string.gsub() string.byte() string.char()
|
字符串声明
1 2 3
| print("**********字符串************") str1 = "双引号字符串" str2 = "单引号字符串"
|
获取字符串长度
lua中获取字符串长度的方法是在字符串变量前加#
,这里实际返回的是该字符串有多少字节,需要注意的是,在lua里,一个中文字符占3个字节
1 2 3 4 5 6 7
| print("**********字符串长度************") s = "aBcdEfG" print(#s) s = "aBcdEfG字符串" print(#s) s = "字" print(#s)
|
输出:
1 2 3 4
| **********字符串长度************ 7 16 3
|
字符串多行打印
lua中同样有转义字符,使用\n
即可换行,像使用注释那样使用[[...]]
可以编写多行字符串,类似于python的"""..."""
1 2 3 4 5 6 7 8
| print("**********字符串多行打印************") print("123\n123\n") s = [[ 这样 也可以 多行打印 ]] print(s)
|
输出:
1 2 3 4 5 6 7
| **********字符串多行打印************ 123 123
这样 也可以 多行打印
|
字符串拼接
lua的字符串拼接是通过..
来拼接的,如果变量类型是number
的也会转为字符串然后再拼接(boolean
和nil
类型不可以参与字符串拼接)
1 2 3 4 5
| print("**********字符串拼接************") print("123" .. "456") s1 = "123123" s2 = 111 print(s1 .. s2)
|
输出:
1 2 3
| **********字符串拼接************ 123456 123123111
|
lua也有string.format
函数在函数来生成具有特定格式的字符串
函数的第一个参数是格式 , 之后是对应格式中每个代号的各种数据,这个函数的格式很像 C 语言中的 printf()
在字符串需要内嵌的位置使用%_
字符串标记符来标记,后面跟上需要插入的内容,不同的%_
代表插入的内容不同
-
%d
:与数字拼接
-
%a
:与任何字符拼接
-
%s
:与字符配对
- …
1
| print(string.format("我是唐老狮,我今年%d岁了", 18))
|
输出:
格式字符串可能包含以下的转义码:
- %c - 接受一个数字, 并将其转化为ASCII码表中对应的字符
- %d, %i - 接受一个数字并将其转化为有符号的整数格式
- %o - 接受一个数字并将其转化为八进制数格式
- %u - 接受一个数字并将其转化为无符号整数格式
- %x - 接受一个数字并将其转化为十六进制数格式, 使用小写字母
- %X - 接受一个数字并将其转化为十六进制数格式, 使用大写字母
- %e - 接受一个数字并将其转化为科学记数法格式, 使用小写字母e
- %E - 接受一个数字并将其转化为科学记数法格式, 使用大写字母E
- %f - 接受一个数字并将其转化为浮点数格式
- %g(%G) - 接受一个数字并将其转化为%e(%E, 对应%G)及%f中较短的一种格式
- %q - 接受一个字符串并将其转化为可安全被Lua编译器读入的格式
- %s - 接受一个字符串并按照给定的参数格式化该字符串
为进一步细化格式, 可以在%号后添加参数. 参数将以如下的顺序读入:
- (1) 符号: 一个+号表示其后的数字转义符将让正数显示正号. 默认情况下只有负数显示符号.
- (2) 占位符: 一个0, 在后面指定了字串宽度时占位用. 不填时的默认占位符是空格.
- (3) 对齐标识: 在指定了字串宽度时, 默认为右对齐, 增加-号可以改为左对齐.
- (4) 宽度数值
- (5) 小数位数/字串裁切: 在宽度数值后增加的小数部分n, 若后接f(浮点数转义符, 如%6.3f)则设定该浮点数的小数只保留n位, 若后接s(字符串转义符, 如%5.3s)则设定该字符串只显示前n位.
1 2 3 4 5 6 7 8 9 10 11
| string1 = "Lua" string2 = "Tutorial" number1 = 10 number2 = 20
print(string.format("基本格式化 %s %s",string1,string2))
date = 2; month = 1; year = 2014 print(string.format("日期格式化 %02d/%02d/%03d", date, month, year))
print(string.format("%.4f",1/3))
|
以上代码执行结果为:
1 2 3
| 基本格式化 Lua Tutorial 日期格式化 02/01/2014 0.3333
|
其他类型转字符串
print
函数会默认将输出的内容类型转为字符串再输出
1 2 3
| print("**********其他类型转字符串************") a = true print(tostring(a))
|
输出:
1 2
| **********其他类型转字符串************ true
|
字符串公共方法
以下方法里,作为参数传入的字符串都不会被修改,都是返回一个新字符串
1 2
| print("**********字符串提供的公共方法************") str = "aBcdEfGcd"
|
小写转大写
1 2
| print(string.upper(str))
|
大写转小写
1 2
| print(string.lower(str))
|
翻转字符串
1 2
| print(string.reverse(str))
|
字符串索引查找
在lua中,函数是可以有多返回值的,这个函数就是多返回值的,第二个参数传入的是一个字符串,就会返回查找到的起始索引和末尾索引
另外,在Lua中,索引从1开始数!(反程序员.jpg)
1 2
| print(string.find(str, "cdE"))
|
截取字符串
1 2
| print(string.sub(str, 3, 4))
|
字符串重复拼接
1 2
| print(string.rep(str, 2));
|
字符串修改
第二个返回值返回的是修改了几次
1 2
| print(string.gsub(str, "cd", "**"))
|
字符转ASCII码
第二个参数是指定哪个字符串被转为ASCII码,默认为1
1 2 3
| a = string.byte("Lua", 1) print(a)
|
ASCII码转字符