1、概述
字符串是字节序列。lua是不头疼字节如何编码文本的。它的字符串可以包含包含任何数字代码的字节,包括嵌入的零。可以存储任意二进制数据,也可以存储unicode(UTF-8,UTF-16等)字符串。但是推荐使用utf-8。
字符串不可变,不能修改字符串中的字符。
字符串替换使用string.gsub(a, subtext, newtext)
lua中的字符串自动内存管理 ,正如lua中的对象(table, function)。
字符串长度使用#str,计算字节长度。在一些编码中与字符数不一致
字符串拼接使用..操作符。
2、字面常量
使用单引号对或者双引号对来表示字面常量。单引号对可以使用双引号(双引号对中可以使用单引号),不依赖转义。
支持的转义字符
\a | bell |
\b | back space |
\f | form feed |
\n | newline |
\r | carriage return |
\t | horizontal tab |
\v | vertical tab |
\\ | backslash |
\" | double quote |
\' | single quote |
\z | 跳过后面的空格字符,直到遇到非空格字符 |
3、长字符串
使用双层方括号来表示长字符串[[ ]]。当第一个字符为换行符是会忽略。
在字符串中包含]]时,作为长字符串的边界,可以使用[==[其中=可以用多个来表示开始,结束使用对应的]==]
4、数字和字符串转换
任意应用在字符串的数学操作符会将字符串转为数字。同时,如果希望是字符串,但是是数字时,会将数字转为字符串。
字符串转数字使用tonumber函数,默认是转换成10进制形式。可以指定2-36进制。
数字转字符串使用tostring函数
5、字符串库
函数 | 说明 | 操作符 |
string.length(s) | 返回字符串长度,与#s相似 | |
string.rep(s,n) | 返回s重复n次 | |
string.reverse(s) | 字符串反转 | |
string.lower(s) | 返回原字符串的小写表示形式 | |
string.upper(s) | 返回原字符串的大写表示形式 | s:upper() |
string.sub(s, i, j) | 返回字符串s的子串s[i..j],字符串索引从1开始 | s:sub(i,j) |
string.char(num1, [nums2...]) | 返回对应的字符 | |
string.byte(s, [i], [j]) | 返回字节码。没有[i]时,返回字符串s的第一个字符的字节码。有[i]时表示返回字符串s的第i个字符的字节码。有[i],[j]时表示获取子串s[i..j]对应的字节码。 | |
string.format | 格式化字符串 | |
string.find(text, pattern) | 返回模式串在文本串的初始位置和结束位置 | |
string.gsub | 全局替换文本 |
可以使用字符串中来调用库中的函数,通过使用分号操作符。
6、unicode
utf8库是以字节索引为基础。如果需要使用字符索引,需要使用utf8.offset来将字符索引转成字节索引
utf8.len | 返回utf-8字符的个数 |
utf8.char | 与string.char类似 |
utf8.codepoint | 与string.byte类似 |
utf8.offset | 将字符索引转为字节索引 |
utf8.codes | 迭代字符串 |