string.format
时间: 2025-07-14 14:16:18 浏览: 4
<think>我们正在讨论Lua的string.format函数。根据引用,我们知道这个函数用于格式化字符串,比使用".."操作符连接字符串在某些情况下更灵活和可读,尤其是当需要特定格式转换(如十六进制、补零等)时。
函数定义:
string.format(formatstring, ...)
第一个参数是格式字符串,包含占位符(如%d, %s等),后续参数用于替换这些占位符。
常用占位符:
%d - 整数
%f - 浮点数
%s - 字符串
%x - 十六进制(小写字母)
%X - 十六进制(大写字母)
%% - 百分号本身
特殊格式控制(以%d为例):
%02d - 表示整数至少显示两位,不足两位在前面补0
%-3d - 表示左对齐,宽度为3,不足用空格填充
示例:
1. 整数补零:string.format("%02d", 1) -> "01"
2. 左对齐:string.format("%-3d", 22) -> "22 "(后面有一个空格)
虽然string.format在性能上可能比".."稍差(因为它调用了C函数),但在复杂格式化时提高了可读性。
下面我们通过一些示例来详细说明用法。</think>### Lua `string.format` 字符串格式化详解
`string.format()` 是 Lua 中用于格式化字符串的核心函数,特别适合处理复杂格式或需要特定转换的场景。相比简单的 `..` 连接操作,它提供更强大的格式化能力[^1][^2]。
#### 基本语法
```lua
local result = string.format(format_string, arg1, arg2, ...)
```
- **format_string**:包含占位符的格式字符串
- **arg1, arg2...**:替换占位符的实际值
#### 常用占位符
| 占位符 | 说明 | 示例 | 输出结果 |
|--------|---------------------|--------------------------|----------------|
| `%d` | 十进制整数 | `string.format("%d", 25)`| `"25"` |
| `%f` | 浮点数 | `string.format("%.2f", math.pi)` | `"3.14"` |
| `%s` | 字符串 | `string.format("Hello %s", "Lua")` | `"Hello Lua"` |
| `%x` | 十六进制(小写) | `string.format("%x", 255)` | `"ff"` |
| `%X` | 十六进制(大写) | `string.format("%X", 255)` | `"FF"` |
| `%%` | 百分号本身 | `string.format("50%% off")` | `"50% off"` |
#### 高级格式控制
1. **数字补零**(固定位数显示):
```lua
print(string.format("ID: %03d", 7)) -- ID: 007
print(string.format("Hex: %04X", 15)) -- Hex: 000F
```
2. **对齐控制**:
```lua
-- 左对齐(宽度10)
print(string.format("|%-10s|", "Lua")) -- |Lua |
-- 右对齐(宽度10)
print(string.format("|%10s|", "Lua")) -- | Lua|
```
3. **浮点数精度**:
```lua
print(string.format("Pi: %.4f", math.pi)) -- Pi: 3.1416
print(string.format("Ratio: %.1f%%", 85.32)) -- Ratio: 85.3%
```
4. **多参数组合**:
```lua
local name, age = "Alice", 30
local msg = string.format("%s is %d years old (%02d/%02d)",
name, age, 5, 3)
-- Alice is 30 years old (05/03)
```
#### 性能注意事项
虽然 `string.format()` 比 `..` 连接操作性能稍低(底层调用 C 函数 `str_format`)[^3],但在以下场景仍推荐使用:
- 需要数字格式化(补零、十六进制转换等)
- 长字符串拼接(提高可读性)
- 需要精确控制输出格式时
```mermaid
graph LR
A[字符串格式化需求] --> B{简单拼接?}
B -->|是| C[使用 .. 操作符]
B -->|否| D{需要特殊格式?}
D -->|是| E[使用 string.format]
D -->|否| F[考虑 table.concat]
```
#### 实际应用示例
```lua
-- 表格数据格式化输出
local data = {
{ "Apple", 2.49, 10 },
{ "Banana", 1.29, 25 },
{ "Orange", 3.99, 8 }
}
for _, item in ipairs(data) do
print(string.format("| %-10s | $%5.2f | %03d |",
item[1], item[2], item[3]))
end
-- 输出:
-- | Apple | $ 2.49 | 010 |
-- | Banana | $ 1.29 | 025 |
-- | Orange | $ 3.99 | 008 |
```
阅读全文
相关推荐







