前言#
从今天开始我们要进军字符串操作的库函数了,这些函数都放在全局表string
中,说起字符串操作熟悉c语言的程序猿都不会陌生,比如strcpy
,strcmp
,strlen
等等,这些函数串处理的经典函数。
lua中这个字符串处理库也是提供对字符串处理的基本函数,比如查找、提取子串、,模式匹配等等,在Lua中字符串的第一个字母索引为1,这一点不同于c语言中第一个字母索引为0的约定,并且在lua中引用字符串的索引可以为负数,表示从字符串的末尾向前查找,比如字符串最后一个字母的索引可以表示为-1。
字符串处理库的所有函数都被放置在表string
中,并且还为操作的字符串设置了元表,使得这些字符串有了一个指向表string
的__idnex
字段,因此你可以用面向对象的方式来调用这些函数,比如函数string,.byte(s, i)
可以写成`s:byte(i)。
内容#
string.byte()##
- 原型:string.byte (s [, i [, j] ])
- 解释:函数返回字符
s[i], s[i+1], ···, s[j]
的内部数字编码(ASCII码),其中参数i
的默认值是1,而参数j
的默认值是i
。需要注意的是该函数在返回的数字编码在跨平台方面不一定是可移植的。
Usage##
- 首先新建一个文件将文件命名为bytetest.lua然后编写如下代码:
-- 首先定义一个字符串
local str = "012abcd"
print("str = "..str)
-- 使用常规方式
print("\nafter string.byte(str,1,4)")
print(string.byte(str,1,4))
-- 使用另一种表现方式
print("\nafter str:byte(1,4)")
print(str:byte(1,4))
-- 使用负数索引
print("\nafter str:byte(-2,-1)")
print(str:byte(-2,-1))
-- 当参数i大于j时
print("\nafter str:byte(2,1)")
print(str:byte(2, 1))
-- 当索引无效时
print("\nafter str:byte(2000,1000000)")
print(str:byte(2000,1000000))
- 运行结果
总结#
- 首先需要注意的是这个字符串字处理库假想字符串都是单字节编码的。
- 在代码的示例中我们测试了这个函数的两种写法结果都是一样的。
- 通过结果可知使用负数来作为字符串中字符的索引也是没有问题的。
- 我们发现代码
str:byte(2, 1)
是没有结果的,原因是这个函数不能从后往前依次显示字符的ASCII码,不管是证书索引还是负数索引,需要满足参数i
要小于等于参数j
的值。 - 从最后一组测试可以看出当引用的索引在原字符串中不存在时,函数也是没有返回结果的。
网友评论