初面网初面网

字符串

Lua中字符串使用8个比特位(1Byte)存储。Lua5.3开始提供了一个帮助使用UTF-8编码的函数库。

Lua中字符串是不可变值,但是可以创建一个新字符串达到修改字符串的目的。

字符串可以用双引号包裹,也可以用单引号。

字符串会存储在内存中,系统能够自动管理这部分内存

a = "one string"
b = string.gsub(a, "one", "another")
print(a)
print(b)

获取长度

使用长度操作符获取长度

a = "hello"

print(#a)
print(#"hello world")

-- 注意,某些编码中长度可能跟字符个数不同

连接字符串

a = "hello"
b = " world"

print(a..b) -- hello world

-- 始终注意,字符串不是被改变的,而是创建了新字符串

转义

有些字符串中,需要字符以某些方式表达另一个意思,这时候就涉及到转义。例如在某字符串中,需要在某个字符后面添加换行符。

a = "hello\nworld"

print(a)

a里的\n就是换行符。像这样的符号还有很多,请自行搜索。

也可以用数字表示字符。这里涉及到ASCII码相关知识,也请自行搜索,或者在本站查看相关知识。

可以用\xxx或\xhh表示一个字符。前一个表示法中,三位数字是必须的,不足的用0补足。后一个表示法中,\x表示16进制表示,hh则是十六进制表示的数字。

print('\041')
print('\x64')

长字符串

如果一块内容被两个括号包裹起来,那么它们会被识别为长字符串。

page = [[
  <html>
    <head>
      <title>首页</title>
    </head>

    <body>
      <h1>这里是首页</h1>
    </body>
  </html>
]]

write(page)

有可能会遇到这样的代码

a[b[c]]

这样最右侧的]]可能会被认为是注释的结束符号,所以可以用[==[]==]这种方式来限定开、闭符号。

为了防止空行被转义为换行符(尤其是字符串内容为非文本的时候),从5.2版本开始提供了\z,这样在换行时会自动识别到下一行

str = "\x00\x01\z
        \x02\x03
      "
print(str)

强制类型转换

进行算数操作的时候会尝试将字符串转为数值。

但是,在需要字符串的地方也会尝试将数值转为字符串

print(10 .. 20) -- 1020

连接符需要与前一个数字空一格,不然可能会被认为是小数点。

强制转换是个方便的功能,但很多时候也没那么方便。5.3版本后,只有整数与整数进行操作时结果才会默认返回整数。

使用tonumber将字符串转成数字

tonumber("-3")        -- -3
tonumber("5e")        -- 无法被转换,返回nil

tonumber("1", 2)        -- 以二进制输出。1
tonumber("f", 16)        -- 以十六进制输出。15

使用tostring将数值转换成字符串

print(tostring(10) == "10")  -- true

更新于 2025/2/26