目次
基本的な連結 / 数値との結合
区切りあり / 区切りなし / 範囲指定 / ループで文字列を蓄積する場合
埋め込み+整形 / 桁数指定 / 小数の整形
各手法の使い分け
| 手法 | 向いている場面 |
|---|---|
| .. | 少量の文字列を単純につなぐとき |
| 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桁で表示
関連の記事
