LuaString 库基本用法(标准库相关)

String 库

Lua 解释器对字符串的支持很有限。一个程序可以创建字符串并连接字符串,但不能截取子串,检查字符串的大小,检测字符串的内容。在 Lua 中操纵字符串的功能基本来自于 string 库。

String 库中的一些函数是非常简单的:string.len(s)返回字符串 s 的长度;string.rep(s, n)返回重复 n 次字符串 s 的串;你使用 string.rep(“a”, 2^20)可以创建一个 1M bytes 的字符串(比如,为了测试需要);string.lower(s)将 s 中的大写字母转换成小写(string.upper将小写转换成大写)。如果你想不关心大小写对一个数组进行排序的话,你可以这样:

table.sort(a, function (a, b) 
return string.lower(a) < string.lower(b) 
end) 
string.upper 和 string.lower 都依赖于本地环境变量。所以,如果你在 European Latin-1
环境下,表达式:
string.upper("a??o") 
 --> "A??O". 

调用 string.sub(s,i,j)函数截取字符串 s 的从第 i 个字符到第 j 个字符之间的串。Lua中,字符串的第一个字符索引从 1 开始。你也可以使用负索引,负索引从字符串的结尾向前计数:-1 指向最后一个字符,-2 指向倒数第二个,以此类推。所以, string.sub(s, 1, j)返回字符串 s 的长度为 j 的前缀;string.sub(s, j, -1)返回从第 j 个字符开始的后缀。如果不提供第 3 个参数,默认为-1,因此我们将最后一个调用写为

string.sub(s, j);string.sub(s, 
2, -2)返回去除第一个和最后一个字符后的子串。
s = "[in brackets]"
print(string.sub(s, 2, -2)) --> in brackets 

记住:Lua 中的字符串是恒定不变的。String.sub 函数以及 Lua 中其他的字符串操作函数都不会改变字符串的值,而是返回一个新的字符串。一个常见的错误是:string.sub(s, 2, -2)
认为上面的这个函数会改变字符串 s 的值。如果你想修改一个字符串变量的值,你必须将变量赋给一个新的字符串:
s = string.sub(s, 2, -2)
string.char 函数和 string.byte 函数用来将字符在字符和数字之间转换。string.char 获 取 0 个或多个整数,将每一个数字转换成字符,然后返回一个所有这些字符连接起来的
字符串。string.byte(s, i)将字符串 s 的第 i 个字符的转换成整数;第二个参数是可选的,
缺省情况下 i=1。下面的例子中,我们假定字符用 ASCII 表示:

print(string.char(97)) --> a 
i = 99; print(string.char(i, i+1, i+2)) --> cde 
print(string.byte("abc")) --> 97 
print(string.byte("abc", 2)) --> 98 
print(string.byte("abc", -1)) --> 99 

上面最后一行,我们使用负数索引访问字符串的最后一个字符。函数 string.format 在用来对字符串进行格式化的时候,特别是字符串输出,是功能强大的工具。这个函数有两个参数,使用和 C 语言的 printf 函数几乎一模一样,你完全可以照 C 语言的 printf 来使用这个函数。第一个参数为格式化串:由指示符和控制格式的字符组成。指示符后的控制格式的字符可以为:十进制’d’;十六进制’x’;八进制’o’;
浮点数’f’;字符串’s’。

在指示符’%'和控制格式字符之间还可以有其他的选项:用来控制更详细的格式,比如一个浮点数的小数的位数:

print(string.format("pi = %.4f", PI)) 
 --> pi = 3.1416 
d = 5; m = 11; y = 1990 
print(string.format("%02d/%02d/%04d", d, m, y)) 
 --> 05/11/1990 
tag, title = "h1", "a title"
print(string.format("<%s>%s</%s>", tag, title, tag)) 
 --> <h1>a title</h1>

第一个例子,%.4f 代表小数点后面有 4 位小数的浮点数。第二个例子%02d 代表以固定的两位显示十进制数,不足的前面补 0。而%2d 前面没有指定 0,不足两位时会以空白补足。对于格式串部分指示符得详细描述清参考 lua 手册,或者参考 C 手册,因为Lua 调用标准 C 的 printf 函数来实现最终的功能。

发布了290 篇原创文章 · 获赞 153 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_39885372/article/details/104416587