Lua 基础教程(十)字符串
hudson 译 原文
字符串是字符以及换行、换页等控制字符构成的序列。字符串可以用如下三种形式初始化:
- 单引号之间的字符
- 双引号之间的字符
- 在[[和]]之间的字符
以下是上述三种形式的示例:
string1 = "Lua"
print("\"String 1 is\"",string1)
string2 = 'Tutorial'
print("String 2 is",string2)
string3 = [["Lua Tutorial"]]
print("String 3 is",string3)
运行上面的程序时,输出如下:
"String 1 is" Lua
String 2 is Tutorial
String 3 is "Lua Tutorial"
在字符串中使用转义序列字符可以改变字符的正常解释。例如,要打印双引号(""),上面的示例中使用了"。转义序列及其用法如下表所示。
| 转义序列 | 用途 |
|---|---|
| \a | 响铃 |
| \b | 退格 |
| \f | 换页 |
| \n | 换行 |
| \r | 回车 |
| \t | 制表符 |
| \v | 垂直制表符 |
| \ | 反斜杠 |
| " | 双引号 |
| ' | 单引号 |
| [ | 左方括号 |
| ] | 右方括号 |
字符串操作
Lua支持对字符串进行操作的方法如下:
| 序号 | 方法 & 用途 |
|---|---|
| 1 | string.upper(argument) |
| 返回参数的大写表示。 | |
| 2 | string.lower(argument) |
| 返回参数的小写表示。 | |
| 3 | string.gsub(mainString,findString,replaceString) |
| 返回用replaceString替换findString而得到的字符串。 | |
| 4 | string.find(mainString,findString,optionalStartIndex,optionalEndIndex) |
| 返回mainString中findString的起始索引和结束索引,如果未找到则返回nil。 | |
| 5 | string.reverse(arg) |
| 返回反转后字符串。 | |
| 6 | string.format(...) |
| 返回格式化后的字符串。 | |
| 7 | string.char(arg) 和 string.byte(arg) |
| 返回参数的内部数字和字符表示。 | |
| 8 | string.len(arg) |
| 返回arg字符串的长度。 | |
| 9 | string.rep(string, n)) |
| 返回重复字符串n次而得到的字符串。 | |
| 10 | .. |
| 连接两个字符串。 |
下面我们列举更多一些示例,确切地看看这些字符串操作函数的行为。
大小写转换
下面代码将字符串转换为大写和小写:
string1 = "Lua";
print(string.upper(string1))
print(string.lower(string1))
运行上面的程序时,将得到以下输出:
LUA
lua
替换子字符串
下面代码用另一个字符串替换一个字符串:
string = ”Lua Tutorial“
-- replacing strings
newstring = string.gsub(string,”Tutorial“,”Language“)
print(”The new string is “..newstring)
string = "Lua Tutorial"
运行上面的程序时,将得到以下输出:
The new string is Lua Language
查找和反转
下面代码在一个字符串中查找子字符串的索引并反转字符串:
string = ”Lua Tutorial“
-- replacing strings
print(string.find(string,”Tutorial“))
reversedString = string.reverse(string)
print(”The new string is“,reversedString)
string = "Lua Tutorial"
运行上面的程序时,将得到以下输出:
5 12
The new string is lairotuT auL
格式化字符串
很多时候,需要以格式化的方式打印字符串。可以使用string.format函数来格式化输出,如下所示:
string1 = "Lua"
string2 = "Tutorial"
number1 = 10
number2 = 20
-- Basic string formatting
print(string.format("Basic formatting %s %s",string1,string2))
-- Date formatting
date = 2; month = 1; year = 2014
print(string.format("Date formatting %02d/%02d/%03d", date, month, year))
-- Decimal formatting
print(string.format("%.4f",1/3))
运行上述程序时,将得到以下输出:
Basic formatting Lua Tutorial
Date formatting 02/01/2014
0.3333
字符和字节表示
如下示例代码将字符串从字符串转换为内部表示,反之亦然:
-- Byte conversion
-- First character
print(string.byte("Lua"))
-- Third character
print(string.byte("Lua",3))
-- first character from last
print(string.byte("Lua",-1))
-- Second character
print(string.byte("Lua",2))
-- Second character from last
print(string.byte("Lua",-2))
-- Internal Numeric ASCII Conversion
print(string.char(97))
运行上述程序时,将得到以下输出:
76
97
97
117
117
a
其他字符串函数
其他常见的字符串操作函数还包括:字符串拼接,查找字符串的长度,多次重复同一字符串等待。这些操作的示例代码如下:
string1 = "Lua"
string2 = "Tutorial"
-- String Concatenations using ..
print("Concatenated string",string1..string2)
-- Length of string
print("Length of string1 is ",string.len(string1))
-- Repeating strings
repeatedString = string.rep(string1,3)
print(repeatedString)
运行上述程序时,将得到以下输出:
Concatenated string LuaTutorial
Length of string1 is 3
LuaLuaLua