Lua 字符串
字符串(String)是由数字、字母、下划线组成的一串字符
Lua 字符串表示方法
Lua 中字符串可以使用以下三种方式来表示:
- 单引号间的一串字符
- 双引号间的一串字符
- [[和]]间的一串字符
范例 : Lua 中三种字符串表示方法
-- !/usr/bin/lua -- -*- encoding:utf-8 -*- -- filename: main.lua -- author: 简单教程(www.twle.cn) -- Copyright © 2015-2065 www.twle.cn. All rights reserved. array = {"QQ", "Baidu",'Ali','Sina','Meituan'} str1 = "简单教程是学习 Lua 语言最好的所在" print("\"字符串 1 是\"",str1) str2 = 'www.twle.cn' print("字符串 2 是",str2) str3 = [["Lua 教程"]] print("字符串 3 是",str3)
运行以上 Lua 脚本,输出结果如下:
$ lua main.lua "字符串 1 是" 简单教程是学习 Lua 语言最好的所在 字符串 2 是 www.twle.cn 字符串 3 是 "Lua 教程"
转义字符
转义字符用于表示不能直接显示的字符,比如后退键,回车键等
例如在字符串转换双引号可以使用 "\""
下表列出了 Lua 中所有的转义字符
转义字符 | 意义 | ASCII码值(十进制) |
---|---|---|
\a | 响铃(BEL) | 007 |
\b | 退格(BS) ,将当前位置移到前一列 | 008 |
\f | 换页(FF),将当前位置移到下页开头 | 012 |
\n | 换行(LF) ,将当前位置移到下一行开头 | 010 |
\r | 回车(CR) ,将当前位置移到本行开头 | 013 |
\t | 水平制表(HT) (跳到下一个TAB位置) | 009 |
\v | 垂直制表(VT) | 011 |
\\ | 代表一个反斜线字符''\' | 092 |
\' | 代表一个单引号(撇号)字符 | 039 |
\" | 代表一个双引号字符 | 034 |
\0 | 空字符(NULL) | 000 |
\ddd | 1到3位八进制数所代表的任意字符 | 三位八进制 |
\xhh | 1到2位十六进制所代表的任意字符 | 二位十六进制 |
Lua 中操作字符串的方法
Lua 提供了很多的方法来支持字符串的操作
-
- string.upper(argument)
- 将字符串全部转为大写字母
-
- string.lower(argument)
- 将字符串全部转为小写字母
-
- string.gsub(mainString,findString,replaceString,num)
- 将字符串 mainString 的 字符串 findString 替换为字符串 replaceString num 为替换次数,如果忽略,默认为全部替换
> string.gsub("aaaa","a","z",3); zzza 3
-
- string.find (str, substr, [init, [end]])
- 返回在字符串 substr 在 str 中首次出现的位置 不存在则返回 nil
> string.find("Hello Lua user", "Lua", 1) 7 9
-
- string.reverse(arg)
- 字符串反转
> string.reverse("Lua") auL
-
- string.format(...)
- 返回一个类似 printf 的格式化字符串
> string.format("the value is:%d",4) the value is:4
-
- string.char(arg)
- 将整型数字转成字符并拼接
> string.char(66) B > string.char(97,98,99,100) abcd
-
- string.byte(arg[,int])char
- 将字符转化为整数值。 int 用来指定某个字符,默认第一个字符
> string.char(97,98,99,100) abcd > string.byte("ABCD",4) 68 > string.byte("ABCD") 65
-
- string.len(arg)
- 计算字符串长度
> string.len("abc") 3
-
- string.rep(string, n)
- 返回字符串string的n个拷贝
> string.rep("abcd",2) abcdabcd
-
..
操作符- 拼接两个字符串
> "www.twle"..".com" www.twle.cn > print("www.twle"..".cn") www.twle.cn
-
- string.gmatch(str, pattern)
- 返回一个迭代器函数 每次调用迭代器函数,返回一个在字符串 str 找到的下一个符合 pattern 描述的子串 如果参数 pattern 描述的字符串没有找到,迭代函数返回nil
> for word in string.gmatch("Hello Lua user", "%a+") do print(word) end Hello Lua user
-
- string.match(str, pattern, init)
- 只寻找源字串str中的第一个配对 参数init可选, 指定搜寻过程的起点, 默认为1 在成功配对时, 函数将返回配对表达式中的所有捕获结果; 如果没有设置捕获标记, 则返回整个配对字符串. 当没有成功的配对时, 返回nil
> string.match("I have 2 questions for you.", "%d+ %a+") 2 questions > string.format("%d, %q", string.match("I have 2 questions for you.", "(%d+) (%a+)")) 2, "questions"
字符串大小写转换
以下范例演示了如何对字符串大小写进行转换:
-- !/usr/bin/lua -- -*- encoding:utf-8 -*- -- filename: main.lua -- author: 简单教程(www.twle.cn) -- Copyright © 2015-2065 www.twle.cn. All rights reserved. str1 = "Lua"; print(string.upper(str1)) print(string.lower(str1))
运行以上 Lua 脚本,输出结果如下:
$ lua main.lua LUA lua
字符串查找与反转
以下范例演示了如何对字符串进行查找与反转操作:
-- !/usr/bin/lua -- -*- encoding:utf-8 -*- -- filename: main.lua -- author: 简单教程(www.twle.cn) -- Copyright © 2015-2065 www.twle.cn. All rights reserved. string = "Lua Tutorial" -- 查找字符串 print(string.find(string,"Tutorial")) reversedString = string.reverse(string) print("新字符串为",reversedString)
运行以上 Lua 脚本,输出结果如下:
$ lua main.lua 5 12 新字符串为 lairotuT auL
字符与整数相互转换
以下范例演示了字符与整数相互转换
-- !/usr/bin/lua -- -*- encoding:utf-8 -*- -- filename: main.lua -- author: 简单教程(www.twle.cn) -- Copyright © 2015-2065 www.twle.cn. All rights reserved. -- 字符转换 -- 转换第一个字符 print(string.byte("Lua")) -- 转换第三个字符 print(string.byte("Lua",3)) -- 转换末尾第一个字符 print(string.byte("Lua",-1)) -- 第二个字符 print(string.byte("Lua",2)) -- 转换末尾第二个字符 print(string.byte("Lua",-2)) -- 整数 ASCII 码转换为字符 print(string.char(97))
运行以上 Lua 脚本,输出结果如下:
$ lua main.lua 76 97 97 117 117 a
其他常用函数
以下范例演示了其他字符串操作,如计算字符串长度,字符串连接,字符串复制等 string 函数
-- !/usr/bin/lua -- -*- encoding:utf-8 -*- -- filename: main.lua -- author: 简单教程(www.twle.cn) -- Copyright © 2015-2065 www.twle.cn. All rights reserved. string1 = "www." string2 = "twle" string3 = ".com" -- 使用 .. 进行字符串连接 print("连接字符串",string1..string2..string3) -- 字符串长度 print("字符串长度 ",string.len(string2)) -- 字符串复制 2 次 repeatedString = string.rep(string2,2) print(repeatedString)
运行以上 Lua 脚本,输出结果如下:
$ lua main.lua
连接字符串 www.twle.cn
字符串长度 4
twletwle