字符串用于表示文本。 Lua
语言中的字符串既可以表示单个字符,也可以表示一整本书籍。在 Lua
语言中,操作 100K
或者 1M
个字母组成的字符串的程序也很常见。
Lua
语言中的字符串是一串字节组成的序列, Lua
核心并不关心这些字节究竟以何种方式编码文本。在 Lua
语言中,字符使用 8
个比特位来存储( eight-bit clean
)。 Lua
语言中的字符串可以存储包括空字符在内的所有数值代码,这意味着我们可以在字符串中存储任意的二进制数据。同样,我们可以使用任意一种编码方式( UTF-8
、 UTF-16
等)来存储 Unicode
字符串。不过,最好在一切可能的情况下优先使用 UTF-8
编码。 Lua
的字符串标准库默认处理 8
个比特位( 1Byte
)的字符,但是也同样可以非常优雅的处理 UTF-8
字符串。此外, Lua5.3
开始提供了一个帮助使用 UTF-8
编码的函数库。
Lua
语言中的字符串是不可变值( immutable value
)。我们不能像 C
语言中那样直接改变某个字符串中的某个字符,但是我们可以通过创建一个新字符串的方式来达到修改的目的,例如:
a = "one string" b = string.gsub(a, "one", "another") --改变字符串中的某些部分 print(a) --> one string print(b) --> another string
像 Lua
语言中的其他对象(表、函数等)一样, Lua
语言中的字符串也是自动内存管理的对象之一。这意味着 Lua
语言会负责字符串的分配和释放,开发人员无需关注。
可以使用长度操作符(length operator) #
获取字符串的长度。
a = "hello" print(#a) --> 5 print(#"good bye") --> 8
该操作符返回字符串占用的字节数。
提示
在某些编码中,字符串占用的字节数可能与字符串中字符的个数不同。
我们可以使用连接操作符 ..
(两个点)来进行字符串连接。如果操作数中存在数值,那么 Lua
语言会先把数值转换为字符串
> "Hello " .. "World" --> Hello World > "result is " .. 3 --> result is 3
在某些语言中,字符串连接使用的是加号,但实际上 3+5
和 3..5
是不一样的。
注意
在 Lua
语言中,字符串是不可变量。字符串连接总是创建一个新字符串,而不会改变原来作为操作数的字符串。
> a = "Hello" > a .. " World" --> Hello World > a --> Hello