Appearance
字符串
Lua中字符串使用8个比特位(1Byte)存储。Lua5.3开始提供了一个帮助使用UTF-8编码的函数库。
Lua中字符串是不可变值,但是可以创建一个新字符串达到修改字符串的目的。
字符串可以用双引号包裹,也可以用单引号。
字符串会存储在内存中,系统能够自动管理这部分内存
lua
a = "one string"
b = string.gsub(a, "one", "another")
print(a)
print(b)
获取长度
使用长度操作符获取长度
lua
a = "hello"
print(#a)
print(#"hello world")
-- 注意,某些编码中长度可能跟字符个数不同
连接字符串
lua
a = "hello"
b = " world"
print(a..b) -- hello world
-- 始终注意,字符串不是被改变的,而是创建了新字符串
转义
有些字符串中,需要字符以某些方式表达另一个意思,这时候就涉及到转义。例如在某字符串中,需要在某个字符后面添加换行符。
lua
a = "hello\nworld"
print(a)
a里的\n就是换行符。像这样的符号还有很多,请自行搜索。
也可以用数字表示字符。这里涉及到ASCII码相关知识,也请自行搜索,或者在本站查看相关知识。
可以用\xxx或\xhh表示一个字符。前一个表示法中,三位数字是必须的,不足的用0补足。后一个表示法中,\x表示16进制表示,hh则是十六进制表示的数字。
lua
print('\041')
print('\x64')
长字符串
如果一块内容被两个括号包裹起来,那么它们会被识别为长字符串。
lua
page = [[
<html>
<head>
<title>首页</title>
</head>
<body>
<h1>这里是首页</h1>
</body>
</html>
]]
write(page)
有可能会遇到这样的代码
a[b[c]]
这样最右侧的]]可能会被认为是注释的结束符号,所以可以用[==[]==]这种方式来限定开、闭符号。
为了防止空行被转义为换行符(尤其是字符串内容为非文本的时候),从5.2版本开始提供了\z,这样在换行时会自动识别到下一行
lua
str = "\x00\x01\z
\x02\x03
"
print(str)
强制类型转换
进行算数操作的时候会尝试将字符串转为数值。
但是,在需要字符串的地方也会尝试将数值转为字符串
print(10 .. 20) -- 1020
连接符需要与前一个数字空一格,不然可能会被认为是小数点。
强制转换是个方便的功能,但很多时候也没那么方便。5.3版本后,只有整数与整数进行操作时结果才会默认返回整数。
使用tonumber将字符串转成数字
lua
tonumber("-3") -- -3
tonumber("5e") -- 无法被转换,返回nil
tonumber("1", 2) -- 以二进制输出。1
tonumber("f", 16) -- 以十六进制输出。15
使用tostring将数值转换成字符串
lua
print(tostring(10) == "10") -- true