前言#
今天来看一个字符串截取函数,作用就是从原字符串中指定两个索引,截取索引之间的字符作为结果字符串,要注意这个函数和我们之间总结过的函数string.gsub()虽然长得很像,但是貌似没有什么联系,接下来我们一起来看一下函数的用法。
string.sub()##
- 原型:string.sub(s, i [, j])
- 解释:返回字符串
s
从第i个字符到第j个字符的子串,参数i
和参数j
均可以为负数,如果省略参数j
,默认为-1,也就是子串截止到原串的最后。一些特殊的使用方法,比如我们可以调用函数string.sub(s, 1, j)
是返回字符串长度为j的前缀,调用函数string.sub(s, -i)
返回子串长度为i的原串的后缀。
Usage##
- 首先新建一个文件将文件命名为subtest.lua然后编写如下代码:
-- 显示源字符串
local sourcestr = "prefix--de asdsdjjj\0dsfdf56\0mfa54--suffix"
print("\nsourcestr is", string.format("%q", sourcestr))
-- 普通街区
local first_sub = string.sub(sourcestr, 4, 25)
print("\nfirst_sub is", string.format("%q", first_sub))
-- 取字符串前缀
local second_sub = string.sub(sourcestr, 1, 8)
print("\nsecond_sub is", string.format("%q", second_sub))
-- 取字符串后缀
local third_sub = string.sub(sourcestr, -10)
print("\nthird_sub is", string.format("%q", third_sub))
-- 索引越界
local fourth_sub = string.sub(sourcestr, -100)
print("\nfourth_sub is", string.format("%q", fourth_sub))
- 运行结果
总结#
- 使用这个函数需要注意的是参数
i
和参数j
均表示索引,不要认为j
是子串的长度,仅有一种特例,当参数i=1
时,参数j
为子串的长度。 - 注意使用这个函数来取原创的前缀和后缀,其实只是函数使用的一种特例。
- 有最后一组结果可以看出啊当指定的索引越界时,函数会选择最接近指定索引的的一个索引作为参数。
- 注意函数
string.sub()
和之前讲过的函数string.gsub()
貌似没什么关系。