Rust 格式化输出占位符详解

文章目录

Rust 的格式化输出由 std::fmt 模块提供,核心是 format!、 println!、 print!、 eprintln! 等宏。它们的占位符是 {},通过 格式说明符 控制输出样式。

1.基本占位符

占位符 说明 示例
{} 默认格式,按类型的 Display trait 输出 println!("{}", 42) → 42
{:?} Debug 格式,按 Debug trait 输出 println!("{:?}", vec![1,2]) → [1, 2]
{:#?} 美化 Debug 格式,多行缩进 常用于结构体调试
{:#x} 带前缀的十六进制 println!("{:#x}", 255) → 0xff
{:#b} 带前缀的二进制 println!("{:#b}", 5) → 0b101

2.格式说明符完整语法

复制代码
{:[[填充]对齐][符号][#][0][宽度][.精度][类型]}
部分 说明 示例
填充 填充字符,默认空格 {:->10} → --------42
对齐 < 左对齐,^ 居中,> 右对齐 {:<10}、{:^10}、{:>10}
符号 + 强制显示正号,- 默认 {:+} → +42
# 显示前缀(0x、0b) {:#x} → 0xff
0 用 0 填充 {:05} → 00042
宽度 最小宽度 {:8} → 42
精度 浮点小数位数,或字符串最大长度 {:.2} → 3.14
类型 输出进制或格式 x、X、b、o、e、?

3.常用示例

1. 整数进制

rust 复制代码
println!("{}", 255);    // 255(十进制)
println!("{:x}", 255);  // ff(小写十六进制)
println!("{:X}", 255);  // FF(大写十六进制)
println!("{:b}", 5);    // 101(二进制)
println!("{:o}", 8);    // 10(八进制)
println!("{:#x}", 255); // 0xff(带前缀)

2. 浮点数

rust 复制代码
println!("{}", 3.14159);    // 3.14159
println!("{:.2}", 3.14159); // 3.14(保留 2 位小数)
println!("{:e}", 31415.9);  // 3.14159e4(科学计数法)

3. 宽度与对齐

rust 复制代码
println!("{:>10}", 42);   // "        42"(右对齐)
println!("{:<10}", 42);   // "42        "(左对齐)
println!("{:^10}", 42);   // "    42    "(居中)
println!("{:05}", 42);    // "00042"(零填充)
println!("{:->10}", 42);  // "--------42"(自定义填充)

4. 位置参数与命名参数

rust 复制代码
// 位置参数:按顺序引用
println!("{0} {1} {0}", "a", "b"); // a b a

// 命名参数:按名称引用
println!("{name} 今年 {age} 岁", name = "Alice", age = 30);

// 捕获外部变量(Rust 2021+)
let x = 42;
println!("{x}"); // 直接使用变量名

5. Debug 格式

rust 复制代码
#[derive(Debug)]
struct Point { x: i32, y: i32 }

let p = Point { x: 1, y: 2 };
println!("{:?}", p);   // Point { x: 1, y: 2 }
println!("{:#?}", p);  // 多行美化格式

4.注意事项

注意点 说明
{} 需要 Display trait 自定义类型默认没有 Display,需手动实现或用 {:?}
{:?} 需要 Debug trait 用 #[derive(Debug)] 自动派生
精度对字符串的影响 {:.3} 对字符串表示截取前 3 个字符
宽度是最小值 实际内容超过宽度时不会被截断

5.一句话总结

Rust 格式化占位符 {} 通过 {:[[填充]对齐][符号][#][0][宽度][.精度][类型]} 控制输出,支持 Display、Debug、进制转换、对齐、填充、精度等,是 Rust 中最常用的输出工具。

相关推荐
怪我冷i10 小时前
Rust 的impl语法详解
开发语言·后端·rust
geovindu15 小时前
rust: Semaphore Pattern
开发语言·后端·设计模式·rust·代理模式·企业级信号量模式·同步型模式
Thneonl16 小时前
Claude Code 频繁 Compacting?发布次日我根治了 2 个痛点
后端·rust
怪我冷i1 天前
Rust 智能指针 RefCell<T> 与内部可变性模式
rust
YOLOW922 天前
两周五个版本:我用 Rust 写的 AI 数据引擎 PageSift,0.81 系列做了什么
rust
西风测评2 天前
SSH 中文乱码的根源:locale、SendEnv 与 env 请求
rust
unconditional2 天前
我数了下 sdkm 的源码:41 个工具的安装逻辑,四分之三是同一行
rust·开源
niyongsheng2 天前
3D 装箱算法工程化:数据结构、放置启发式与支撑规则
数据结构·算法·rust
Hello.Reader2 天前
tsrs 技术解析用 Rust 移植 TypeScript 7,类型检查还能怎样提速?
开发语言·rust·typescript
王仔小奶2 天前
Rust 正在接管金融圈?深度拆解一份高薪 FinTech 岗位 JD
开发语言·金融·rust