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
# 显示前缀(0x0b {:#x}0xff
0 用 0 填充 {:05}00042
宽度 最小宽度 {:8} 42
精度 浮点小数位数,或字符串最大长度 {:.2}3.14
类型 输出进制或格式 xXboe?

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][宽度][.精度][类型]} 控制输出,支持 DisplayDebug、进制转换、对齐、填充、精度等,是 Rust 中最常用的输出工具。

相关推荐
孙启超1 小时前
【AI开发之Rust】第 13 课:async/await 与 tokio 异步运行时
开发语言·后端·rust
小道士写程序1 小时前
Rust + Axum + MySQL + SQLx
rust
mikuyyds18 小时前
geo-toolbox 插件算法解析:RUSLE 与 MUSLE 的工程化落地
算法·rust·gis
qq_4523962319 小时前
第十四篇:《系统编程实战:用 Rust 编写高性能 HTTP 服务器》
rust
Amos_Web1 天前
Rspack 源码解析(十一):资产 Hook 与增量构建
前端·rust·源码阅读
孙启超1 天前
【AI开发之Rust】第 12 课:并发模型与同步原语
开发语言·后端·rust
柯南46681 天前
【AI开发之Rust】第 13 课:async/await 与 tokio 异步运行时
rust·编程语言