Lua之String庫用法API

像這樣的東西可以去查找API,上邊的介紹很詳細。

簡單的說一下常用的Lua裏的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 (s, pattern [, init])

  這個函數與find()函數類似,不同的是,find返回匹配的索引,這個函數返回第一個匹配的內容本身,如下:

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

 

  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
發佈了37 篇原創文章 · 獲贊 47 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章