2.9 字符串类型

在Lua中字符串可以双引号或单引号括起来表示,示例如下:

      local s1 = "Hello Lua"
      local s2 = 'Hello Lua'

有的时候我们需要将字符串拼接起来,在Java中使用“+”号将字符串连接,而在Lua中使用双点“..”将字符串拼接起来。示例代码如下:

      local s ="Hello".."Lua"

获得字符串长度的需要使用String库提供string.len(s)函数。示例代码如下:

      local slen = string.len(s)

其中s是字符串。

String库还提供了很多函数,下面分别介绍一下。

2.9.1 字符串截取

字符串截取是String库提供的string.sub(s, n, m)函数截取字符串,该函数是截取从第n个字符到第m个字符之间的字符串。示例代码如下:

      local s = "Hello Lua"

      local sub1 = string.sub(s,1,3)                                                  ①
      print(sub1)                                    --输出Hel
      local sub2 = string.sub(s,2, -2)                                                ②
      print(sub2)                                    --输出 ello Lu

输出结果如下:

      Hel
      ello Lu

上述代码第①行是截取1~3字符串,与Java等语言不同的是Lua中字符串的索引下标从1开始,索引可以有负数,-1表示最后一个字符,-2表示倒数第2个字符,所以第②行代码截取结果是ello Lu,索引2的字符是e,索引-2的字符是u。

2.9.2 字符串转换

String库提供了字符串转换的相关函数,包括:大写、小写、重复和翻转等。示例代码如下:

      local s = "Hello Lua"

      local s1 = string.lower(s)                                                      ①
      print(s1)

      local s2 = string.upper(s)                                                      ②
      print(s2)

      local s3 = string.rep("Hello",3)                                                ③
      print(s3)

      local s4 = string.reverse("Hello")                                              ④
      print(s4)

输出结果如下:

      hello lua
      HELLO LUA
      Hello Hello Hello
      olleH

上述代码第①行是使用函数string.lower(s)将s字符串转换为小写字符串,输出结果“hello lua”。第②行代码是使用函数string.upper(s)将s字符串转换为大写字符串,输出结果“HELLO LUA”。

第③行代码是使用函数string.rep("Hello",3)将重复拼接3次,输出结果“Hello Hello Hello”。第④行代码是使用函数string.reverse("Hello")将翻转字符串,输出结果“olleH”。

2.9.3 字符串查询

String库提供的string.find(s, sub)函数是从s字符串中查找sub字符串,函数有两个返回值,示例代码如下:

      local s = "Hello Lua"
      local i, j = string.find(s, "Hello")                                             ①
      print(i, j)

输出结果如下:

      1  5

上述代码第①行是使用函数string.find(s, "Hello")在"Hello Lua"中查找"Hello",返回值i为找到开始位置,j为结束的字符串。

2.9.4 字符串格式化

String库提供的string.format("format", ...)函数是对字符串进行格式化输出,其中的格式化所需要参数有:s、c、d、E、e、f、g、G、i、o、u、X和x,这些参数与C语言中的printf("format", ...)函数是类似,如表2-5所示。

表2-5 格式化参数

示例代码如下:

      local s = string.format("%s %q", "Hello", "Lua")
      print(s)

      local s = string.format("%c%c%c",76,117,97)
      print(s)

      local s = string.format("%e, %E", 3.14,3.14)
      print(s)

      local s = string.format("%f, %g, %G",3.14, math.pi, math.pi)
      print(s)

      local s = string.format("%d, %i, %u", 10, 10, -10)
      print(s)

      local s = string.format("%o, %x, %X", 10, 10, 10)
      print(s)

输出结果如下:

      Hello "Lua"
      Lua
      3.140000e+000, 3.140000E+000
      3.140000, 3.14159, 3.14159
      10, 10, 4294967286
      12, a, A