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")