Lua 文字列を結合するサンプル

目次

各手法の使い分け

..演算子で結合する

基本的な連結 / 数値との結合

table.concat()で結合する

区切りあり / 区切りなし / 範囲指定 / ループで文字列を蓄積する場合

string.format()で結合する

埋め込み+整形 / 桁数指定 / 小数の整形

各手法の使い分け

手法 向いている場面
.. 少量の文字列を単純につなぐとき
table.concat() 大量の文字列をループで蓄積するとき
string.format() 数値の整形や書式付き出力が必要なとき

..演算子で結合する

..は、簡単な連結で使用します。

 

基本的な連結

local str1 = "ab"
local str2 = "cd"
local result = str1 .. str2
print(result)  -- abcd

少ない数の文字列を結合する場合にシンプルで読みやすいです。

ただし、..をループ内で大量に使うとパフォーマンスが悪化します。その場合、table.concat()を使用します。

 

数値との結合

local age = 20
local str = "Age: " .. age
print(str)  -- Age: 20

Luaの.. 演算子は数値が自動的に文字列に変換されます。

table.concat()で結合する

配列風テーブルの要素を結合します。

 

区切りあり

local words = {"ab", "cd", "ef"}
local result = table.concat(words, "-")
print(result)  -- ab-cd-ef

第2引数は区切り文字(separator)です。

 

区切りなし

local words = {"ab", "cd", "ef"}
local result = table.concat(words)
print(result)  -- abcdef

 

範囲指定

local words = {"a", "b", "c", "d"}
local result = table.concat(words, ",", 2, 3)
print(result)  -- b,c

第3引数は、開始インデックスです。
第4引数は、終了インデックスです。

 

ループで文字列を蓄積する場合

local t = {}
for i = 1, 3 do
    t[#t + 1] = tostring(i) -- 明示的に文字列変換
end

local result = table.concat(t, ",")
print(result)  -- 1,2,3

Lua5.1ではtable.concat()は文字列要素のみ対応しており、数値を渡すとエラーになります。

Lua5.2以降では数値も受け付けるようになりました。安全のためtostring(i)に変換しています。

string.format()で結合する

文字列結合というよりフォーマット(整形)用途で、値の整形(桁数・小数点)と同時に文字列を作れます。

可読性の高いログ出力やメッセージ生成に向いています。

 

埋め込み+整形

local name = "Taro"
local age = 20

local str = string.format("Name: %s, Age: %d", name, age)
print(str)  -- Name: Taro, Age: 20

%s → 文字列
%d → 整数

 

桁数指定

local num = 7
print(string.format("%04d", num))  -- 0007

%04d → 4桁で0埋め

 

小数の整形

local pi = 3.14159
print(string.format("%.2f", pi))  -- 3.14

%.2f → 小数点以下2桁で表示

関連の記事

Lua 文字列の位置を取得(string.find)

△上に戻る