文章目录
- 1.基本占位符
- 2.格式说明符完整语法
- 3.常用示例
- 4.注意事项
- 5.一句话总结
Rust 的格式化输出由
std::fmt模块提供,核心是format!、println!、print!、eprintln!等宏。它们的占位符是{},通过格式说明符控制输出样式。1.基本占位符
| 占位符 | 说明 | 示例 |
|---|---|---|
{} | 默认格式,按类型的Displaytrait 输出 | println!("{}", 42)→42 |
{:?} | Debug 格式,按Debugtrait 输出 | println!("{:?}", vec![1,2])→[1, 2] |
{:#?} | 美化 Debug 格式,多行缩进 | 常用于结构体调试 |
{:#x} | 带前缀的十六进制 | println!("{:#x}", 255)→0xff |
{:#b} | 带前缀的二进制 | println!("{:#b}", 5)→0b101 |
冒号前面是什么?
冒号前面是占位符本身,即{}中的内容。在 Rust 中,占位符由两部分组成:
- 冒号前面:占位符主体,可以是空的
{}(默认格式),也可以是位置参数{0}、{1}或命名参数{name}; - 冒号后面:格式说明符,用于控制对齐、宽度、精度、进制等输出样式。
例如{0:>10}中,冒号前面的0表示「引用第 0 个参数」,冒号后面的>10表示「右对齐且最小宽度为 10」。当冒号前面为空(即{:?})时,表示「按默认参数顺序引用,但使用?指定的 Debug 格式」。
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. 整数进制
println!("{}",255);// 255(十进制)println!("{:x}",255);// ff(小写十六进制)println!("{:X}",255);// FF(大写十六进制)println!("{:b}",5);// 101(二进制)println!("{:o}",8);// 10(八进制)println!("{:#x}",255);// 0xff(带前缀)2. 浮点数
println!("{}",3.14159);// 3.14159println!("{:.2}",3.14159);// 3.14(保留 2 位小数)println!("{:e}",31415.9);// 3.14159e4(科学计数法)3. 宽度与对齐
println!("{:>10}",42);// " 42"(右对齐)println!("{:<10}",42);// "42 "(左对齐)println!("{:^10}",42);// " 42 "(居中)println!("{:05}",42);// "00042"(零填充)println!("{:->10}",42);// "--------42"(自定义填充)4. 位置参数与命名参数
// 位置参数:按顺序引用println!("{0} {1} {0}","a","b");// a b a// 命名参数:按名称引用println!("{name} 今年 {age} 岁",name="Alice",age=30);// 捕获外部变量(Rust 2021+)letx=42;println!("{x}");// 直接使用变量名5. Debug 格式
#[derive(Debug)]structPoint{x:i32,y:i32}letp=Point{x:1,y:2};println!("{:?}",p);// Point { x: 1, y: 2 }println!("{:#?}",p);// 多行美化格式4.注意事项
| 注意点 | 说明 |
|---|---|
{}需要Displaytrait | 自定义类型默认没有Display,需手动实现或用{:?} |
{:?}需要Debugtrait | 用#[derive(Debug)]自动派生 |
| 精度对字符串的影响 | {:.3}对字符串表示截取前 3 个字符 |
| 宽度是最小值 | 实际内容超过宽度时不会被截断 |
5.一句话总结
Rust 格式化占位符{}通过{:[[填充]对齐][符号][#][0][宽度][.精度][类型]}控制输出,支持Display、Debug、进制转换、对齐、填充、精度等,是 Rust 中最常用的输出工具。