字符串

类型 字符串
关键词 字符串

概述

字符串表示字符数组。Lua 是 8 位纯净的:字符串可以包含任何 8 位字符,包括嵌入的零 (\0)。

字面字符串

字面字符串可以用匹配的单引号或双引号分隔,并且可以包含以下类似 C 语言的转义序列:\a(响铃),\b(退格),\f(换页),\n(换行),\r(回车),\t(水平制表符),\v(垂直制表符),\\(反斜杠),\"(双引号)和 \'(单引号)。此外,反斜杠后跟一个真正的换行符会在字符串中产生一个换行符。字符串中的字符也可以使用转义序列 \ddd 指定其数值,其中 ddd 是最多三个十进制数字的序列。请注意,如果数字转义符后跟一个数字,则必须使用三个数字来表示。

Lua 中的字符串可以包含任何 8 位值,包括嵌入的零,可以指定为 \0

字面字符串也可以使用由长括号括起来的 long 格式定义。我们将级别为 **n** 的左长括号定义为一个左方括号,后跟 **n** 个等号,再后跟另一个左方括号。因此,级别为 0 的左长括号写为 [[,级别为 1 的左长括号写为 [=[,依此类推。右长括号的定义类似;例如,级别为 4 的右长括号写为 ]====]。长字符串以任何级别的左长括号开头,并在相同级别的第一个右长括号处结束。这种括号形式的字面量可以运行多行,不解释任何转义序列,并忽略任何其他级别的长括号。它们可以包含除正确级别的右括号之外的任何内容。

为了方便起见,当左长括号后面紧跟一个换行符时,该换行符不包含在字符串中。例如,在使用 ASCII 的系统中(其中 a 编码为 97,“换行符”编码为 10,1 编码为 49),以下五个字面字符串表示相同的字符串

 a = 'alo\n123"'
 a = "alo\n123\""

 a = '\97lo\10\04923"'
 a = [[alo
 123"]]
 a = [==[
 alo
 123"]==]

强制转换

Lua 在运行时提供字符串和数字值之间的自动转换。应用于字符串的任何算术运算都会尝试按照通常的转换规则将此字符串转换为数字。相反,只要在预期字符串的地方使用数字,该数字就会以合理的格式转换为字符串。要完全控制数字如何转换为字符串,请使用 string.format() 函数。

连接

Lua 中的字符串连接运算符由两个点 ('..') 表示。如果两个操作数都是字符串或数字,则它们将根据强制转换 above 中提到的规则转换为字符串。否则,将调用 “concat” 元方法。

长度

长度运算符由一元运算符 # 表示。字符串的长度是它的字节数(也就是说,当每个字符是一个字节时,字符串长度的通常含义)。

此页面中的内容引用自 Lua 5.1 参考手册,该手册根据 Lua 许可证 的条款免费提供。