| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- local string = string
- local sfind = string.find
- local slen = string.len
- local ssub = string.sub
- local sgub = string.gsub
- local sformat = string.format
- local setmetatable = setmetatable
- local tinsert = table.insert
- string.split1 = function (szFullString, szSeparator)
- local nFindStartIndex = 1
- local nSplitIndex = 1
- local nSplitArray = {}
- while true do
- local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)
- if not nFindLastIndex then
- nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))
- break
- end
- nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)
- nFindStartIndex = nFindLastIndex + string.len(szSeparator)
- nSplitIndex = nSplitIndex + 1
- end
- return nSplitArray
- end
- function string.split2(szFullString, szSeparator)
- local nFindStartIndex = 1
- local nSplitIndex = 1
- local nSplitArray = {}
- while true do
- local nFindLastIndex = sfind(szFullString, szSeparator, nFindStartIndex)
- if not nFindLastIndex then
- nSplitArray[nSplitIndex] = ssub(szFullString, nFindStartIndex, slen(szFullString))
- break
- end
- nSplitArray[nSplitIndex] = ssub(szFullString, nFindStartIndex, nFindLastIndex - 1)
- nFindStartIndex = nFindLastIndex + 1
- nSplitIndex = nSplitIndex + 1
- end
- return nSplitArray
- end
- function string.split3(str, sep)
- local parts = {__index = tinsert}
- setmetatable(parts, parts)
- sgub(str, sformat("([^%s]+)", sep), parts)
- setmetatable(parts, nil)
- parts.__index = nil
- return parts
- end
- function string.split4(str, sep)
- local ary = {}
- sgub(str, sformat("([^%s]+)", sep), function(c) ary[#ary+1] = c end)
- return ary
- end
- function string.split6(str, mark)
- mark = mark or ",";
- local setStr = {};
- local marklen = string.len(mark);
- local slength = string.len(str);
- local index = 0
- local start = 1
- while true do
- index = string.find(str, mark, start) -- find 'next' 返回 i 和 j
- if index == nil then break end
- local s = string.sub(str, start, index-1)
- table.insert(setStr, s)
- start = index + marklen;
- end
- if start <= slength then
- local s = string.sub(str, start, slength)
- table.insert(setStr, s)
- end
- return setStr;
- end
- local s_ary = {}
- local s_i = 1
- local function func(c)
- s_ary[s_i] = c
- s_i = s_i + 1
- end
- function string.split5(str, sep)
- s_ary = {}
- s_i = 1
- sgub(str, sformat("([^%s]+)", sep), func)
- return s_ary
- end
- local s = "1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20"
- local t = os.clock()
- for i = 1, 100000 do
- local x = string.split1(s, "+")
- end
- print("string.split: " ,os.clock() - t)
- t = os.clock()
- for i = 1, 100000 do
- local x = string.split2(s, "+")
- end
- print("string.split2: " , os.clock() - t)
- t = os.clock()
- for i = 1, 100000 do
- local x = string.split3(s, "+")
- end
- print("string.split3: " , os.clock() - t)
- t = os.clock()
- for i = 1, 100000 do
- local x = string.split4(s, "+")
- end
- print("string.split4: " , os.clock() - t)
- t = os.clock()
- for i = 1, 100000 do
- local x = string.split5(s, "+")
- end
- print("string.split5: " , os.clock() - t)
- t = os.clock()
- for i = 1, 100000 do
- local x = string.split6(s, "+")
- end
- print("string.split6: " , os.clock() - t)
- os.execute("PAUSE")
|