string find, gsub, gmatch使用
【find实现字符串分割】
# 只支持ascii字符,不支持中文这种
function Split(str, delimiter) local arr = {} local index = 1 while true do local index1, index2 = string.find(str, delimiter, index, true) if nil == index1 then break end table.insert(arr, string.sub(str, index, index1-1)) index = index2 + 1 end table.insert(arr, string.sub(str, index)) return arr end
# for in方式
function Split(str, delimiter) local arr = {} local index = 1 local iteratorFunc = function(iteratorObj, key) local index1, index2 = string.find(str, delimiter, index, true) return index1, index2 end for index1, index2 in iteratorFunc do table.insert(arr, string.sub(str, index, index1-1)) index = index2 + 1 end table.insert(arr, string.sub(str, index)) return arr end
【find解析用逗号分割的物品描述字符串】
字符串格式:类型_id_数量
1 function Test3() 2 local str = "aa_10001_16,aa_10002_12,aa_10003_10" 3 local pattern = "((%w+)_(%d+)_(%d+)),?" 4 5 local entrys = {} 6 local index = 1 7 while true do 8 local index1, index2, str, t, id, num = string.find(str, pattern, index) 9 if nil == index1 then break end 10 index = index2 + 1 11 print(index1, index2, str, t, id, num) 12 table.insert(entrys, { str, t, tonumber(id), tonumber(num) }) 13 end 14 return entrys 15 end 16 Test3()
【gmatch解析逗号分割的id列表】
1 function Test6() 2 local strArr = { 3 "1001,1002,1003,1004", 4 "1001", 5 } 6 for i=1,#strArr do 7 local idList = {} 8 local str = strArr[i] 9 local itr = string.gmatch(str, "(%d+)(,?)") 10 for idStr in itr do 11 print(idStr) 12 table.insert(idList, idStr) 13 end 14 end 15 end 16 Test6()
【gsub替换某个类型的物品描述字符串】
比如:bb类型的物品字符串全部替换
1 function Test5() 2 local strArr = { 3 "aa_10001_16,bb_10001_12,cc_10001_10", 4 "bb_10001_12", 5 } 6 local pattern = "(bb_(%d+)_(%d+))(,?)" 7 8 for i=1,#strArr do 9 local str = strArr[i] 10 local str2, replCount = string.gsub(str, pattern, "ab_%2_%3%4") 11 print(str2) 12 end 13 end 14 Test5()