Lua的string库总结




1.可以通过<转义符“\”+数值>来指定字符串中的字符,数值为最多3位数组成的序列。如:
d = "\97\98c"
print(d)        --abc

2.可以用一对[[XXX]]来界定一个字符串XXX。字符串可以为任意字符。如:
e = [[it's mine!
it's not yours! --'Oh'   --"Wow!!!!"
]]
print (e)        --输出[[]]里面的所有内容

3.Lua提供运行时数字和字符的自动转换。即一个数字和一个字符串相加,Lua会尝试把这个字符串转换成数字再求值。不需要我们显式转换。如:

print("5"+6)        --11
print("5e-2"+3)        --3.05

4.长度操作符“#”,可用于求字符串的长度,即字符串包含的字符数。如:

print(#"abcd\n")    --5
str = "abc"
print(#str)            --3

string库

1、string.byte (s [, i [, j]])

  返回字符串的内部数字编码,i、j为字符串的索引,i、j限定了多少字符就返回多少值。如下:

k1,k2,k3 = string.byte("abcdef",1,3)
print (k1,k2,k3)    --97    98    99

2、string.char (···)

  跟byte()相反,把数字编码转换为字符串。如下:
复制代码

s = string.char(97,98,99)
print(s)            --abc

n = string.char()
print(n)            --什么都没输出
print(type(n))        --string
print(string.char(string.byte("hello",1,-2)))    --hell

3、string.dump (function [, strip])

  这个函数是用来序列化函数的。传入一个函数,返回一个字符串。通过load该字符串可以反序列化该函数。用法如下:
复制代码

function max( a,b )
    return a>b and a or b
end
--序列化
du = string.dump(max)
print(type(du))        --string
print(du)            --LuaQ
--反序列化
max2 = load(du)    
--调用函数
print(max2(1,2))    --2

4、string.find (s, pattern [, init [, plain]])

  这个函数如其名,用来查找匹配的pattern,返回该pattern的索引。找到一个匹配就返回。如果找不到,返回空。如下:

txt = "it's very very good!"
i ,j = string.find(txt, "very")
print(i,j)    --6    9
i ,j = string.find(txt, "big")
print(i,j)    --nil    nil 

5、string.format (formatstring, ···)

  这个函数用来格式化字符串。API文档很复杂,用法很多,可查看文档。如下:

print(string.format("i want %d apples", 5))    --i want 5 apples

6.string.match()##

    原型:string.match(s, pattern [, init])
    解释:在字符串s中查找满足参数pattern的匹配子串,如果找到了一个匹配就返回这个匹配子串,若没找到则返回nil,如果参数pattern没有指定匹配参数,则返回整个匹配字符串,
    另外,一个数字形参数init用来指定查找字符串的其实位置,这个参数默认为1,当然也可以设置为负数,即-n表示从字符串尾部向前数n个字符开始查找。

local sourcestr = "ehre99wj=--=-*-/4mdqwl\0ds123fef" print("\nsourcestr = "..sourcestr)
local match_ret = string.match(sourcestr, "%d%d%d") print("\nmatch_ret is "..match_ret)
 match_ret = string.match(sourcestr, "%d%a%a") print("\nmatch_ret is "..match_ret)
match_ret = string.match(sourcestr, "") print("\nmatch_ret is "..match_ret)
match_ret = string.match(sourcestr, "%d%d") print("\nmatch_ret is "..match_ret)
match_ret = string.match(sourcestr, "%d%d", 10) print("\nmatch_ret is "..match_ret)
输出
nsourcestr = ehre99wj=--=-*-/4mdqwl\0ds123fef
match_ret is 123
match_ret is 9wj
match_ret is
match_ret is 99
match_ret is 12

7、string.gmatch (s, pattern)

  这个函数基本就是用来配合for循环使用的,返回一个迭代器函数,每次调用这个迭代器函数都会返回一个匹配该字符串的值。

  Lua5.3参考手册里面的示例很经典了,如下:

s = "hello world from Lua"
for w in string.gmatch(s, "%a+") do
    print(w)    --连续输出每个单词
end

8、string.gsub (s, pattern, repl [, n])

这个函数用来进行字符替换的。将每个匹配的字符串替换成指定的字符串repl。返回替换完毕的字符串和替换的次数。个人觉得这个函数非常有意思。

若repl为函数则会用匹配到的参数作为参数调用这个函数,若repl为table,则会用匹配到的参数作为键去查找这个表。如下:
复制代码

--字符串
print(string.gsub("i have an apple", "apple", "peach"))
--函数
function ff( arg )
    print("function arg : " .. arg)
end
print(string.gsub("my name is qsk", "%a+", ff))
--table
t = {}
metat = {}
metat.__index = function ( table,key )        
    return "!!" .. key
end
setmetatable(t, metat)
print(string.gsub("my name is qsk", "%a+", t))

复制代码

 测试表的时候,给该表设置了一个元表。输出如下:
复制代码

i have an peach    1
function arg : my
function arg : name
function arg : is
function arg : qsk
my name is qsk    4
!!my !!name !!is !!qsk    4

复制代码

匹配字符串中的单词,匹配了4次所以输出的第二个参数是4.


9、string.len (s)、string.lower (s)、string.upper (s)

  这个两个函数都太简单了,一个是求字符串的长度。另一个是将字符串转换为小写。如下:

print(string.len("abcd"))        --4
print(string.lower("MACOS"))    --macos
print(string.upper("12abAB"))    --12ABAB

10、string.rep (s, n [, sep])

  这个函数就是用来将某个字符串自我复制链接起来。如下:

print(string.rep("s", 5,"-"))        --s-s-s-s-s
print(string.rep("ab", 5))            --ababababab


11、string.reverse (s)

  如名,用来反转字符串,反转字符串中字符的序列。如下:

print(string.reverse("abcdefg"))        --gfedcba


12、string.sub (s, i [, j])

  这个函数就是用来截取字符串。很简单,如下:

print(string.sub("abcdefg", 3,5))        --cde


 
string.format用法

格式控制符以%开头,常用的有以下几种

 %s    -  接受一个字符串并按照给定的参数格式化该字符串 %s表示空白符 包括空格 制表符 回车
?%d    - 接受一个数字并将其转化为有符号的整数格式
?%f    -  接受一个数字并将其转化为浮点数格式(小数),默认保留6位小数,不足位用0填充
?%x    - 接受一个数字并将其转化为小写的十六进制格式
?%X    - 接受一个数字并将其转化为大写的十六进制格式

    str = string.format("字符串:%s\n整数:%d\n小数:%f\n十六进制数:%X","qweqwe",1,0.13,348)  
    print(str)  
      
    —- 输出结果:  
    字符串:qweqwe  
    整数:1  
    小数:0.130000  
    十六进制数:15C  


%X的特殊用法
?%08X       中间的第2个数字格式化成多少位,第1个数字表示不足位数时的填充数,通常用0填充。

    str = string.format("0x%08X",348)  
    print(str)   —-> 0x0000015C  
    —-前面的0x只是个普通的字符串,可有可无,因为我们一般在十六进制数前面加上0x来表明这是一个十六进制数,所以这里才加了个0x,没有其他特殊意义。  
%x的特殊用法与%X一样


%f的特殊用法
?%0.3f      中的小数点右边的数字表示小数点后面保留多少位,小数点前面的数字表示位数不足时的填充数,通用用0填充。
?格式化一个小数,保留2位小数

print(string.format("%0.2f",34.2344))  —-> 34.23  

更多用法

%c - 接受一个数字,并将其转化为ASCII码表中对应的字符
?%d, %i - 接受一个数字并将其转化为有符号的整数格式
?%o - 接受一个数字并将其转化为八进制数格式
?%u - 接受一个数字并将其转化为无符号整数格式
?%x - 接受一个数字并将其转化为十六进制数格式,使用小写字母
?%X - 接受一个数字并将其转化为十六进制数格式,使用大写字母
?%e - 接受一个数字并将其转化为科学记数法格式,使用小写字母e
?%E - 接受一个数字并将其转化为科学记数法格式,使用大写字母E
?%f - 接受一个数字并将其转化为浮点数格式
?%g(%G) - 接受一个数字并将其转化为%e(%E,对应%G)及%f中较短的一种格式
?%q - 接受一个字符串并将其转化为可安全被Lua编译器读入的格式
?%s - 接受一个字符串并按照给定的参数格式化该字符串


为进一步细化格式, 可以在%号后添加参数.参数将以如下的顺序读入:

(1) 符号:一个+号表示其后的数字转义符将让正数显示正号.默认情况下只有负数显示符号.
?(2) 占位符: 一个0,在后面指定了字串宽度时占位用.不填时的默认占位符是空格.
?(3) 对齐标识: 在指定了字串宽度时,默认为右对齐,增加-号可以改为左对齐.
?(4) 宽度数值
(5) 小数位数/字串裁切:在宽度数值后增加的小数部分n,若后接f(浮点数转义符,如%6.3f)则设定该浮点数的小数只保留n位,若后接s(字符串转义符,如%5.3s)则设定该字符串只显示前n位.

在这些参数的后面则是上述所列的转义码类型(c, d, i, f, ...).
    string.format("%%c: %c", 83)            输出S  
    string.format("%+d", 17.0)              输出+17  
    string.format("%05d", 17)               输出00017  
    string.format("%o", 17)                 输出21  
    string.format("%u", 3.14)               输出3  
    string.format("%x", 13)                 输出d  
    string.format("%X", 13)                 输出D  
    string.format("%e", 1000)               输出1.000000e+03  
    string.format("%E", 1000)               输出1.000000E+03  
    string.format("%6.3f", 13)              输出13.000  
    string.format("%q", "One\nTwo")         输出"One\                                                         Two"  
    string.format("%s", "monkey")           输出monkey  
    string.format("%10s", "monkey")         输出    monkey  
    string.format("%5.3s", "monkey")        输出  mon</font>  

去掉字符串中的空格
 print(string.gsub(" b c a ", "^%s*(.-)%s*$", "%1"))
 b c a   1  --后面的1表示替代的次数
 print((string.gsub(" b c a ", "^%s*(.-)%s*$", "%1")))
 b c a --加一层括号,只返回格式化后的字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值