コンパクトで高速実行がウリの Lua 5.1 ですが、string オブジェクトに split と join がありません。誰かが実装しているに違いないと思って調べてみると、していますよ!!
個人的には、メンテナンスしやすく、以下のように実装することにした。
string オブジェクトを汚染してしまいますが、好みの問題でしょうけど個人的には問題なしです。ちなみに、table オブジェクトにメソッドを追加しても、テーブル自体にメソッドが追加されるわけではないのですね。
--[[* split string *]]-- -- return iterator string.split_it = function(str, sep) if str == nil then return nil end assert(type(str) == "string", "str must be a string") assert(type(sep) == "string", "sep must be a string") return string.gmatch(str, "[^\\" .. sep .. "]+") end -- return table string.split = function(str, sep) local ret = {} for seg in string.split_it(str, sep) do ret[#ret+1] = seg end return ret end --[[* join *]]-- table.join = function (tbl, sep) local ret for n, v in pairs(tbl) do local seg = tostring(v) if ret == nil then ret = seg else ret = ret .. sep .. seg end end return ret end -- @example -- str = "a,b,c" for _,v in pairs(str:split(",")) do print(v) end str = "1,2,3" for i in str:split_it(",") do print (i) end str = "q,w,e,r" tbl = str:split(",") print(table.join(tbl,",")) -- NG: print(tbl:join(":"))