1 基础占位符
arduino
println!("Hello, {}!", "world");
输出Hello, world!
2 数字格式化
arduino
println!("{:04}", 42);
输出0042
{:04}指定宽度为 4,不足部分用0填充(常用于补全日期、时间等)。
3 Debug 格式化
rust
#[derive(Debug)]
struct User {
name: String,
age: u8
}
fn main() {
let user = User {
name : String::from("123"),
age : 10
};
println!("{:?}", user);
println!("{:#?}", user);
}
{:#?} 输出
js
User {
name: "123",
age: 10,
}
{:?} 输出
js
User { name: "123", age: 10 }
{:?}使用类型的Debug实现格式化(适用于元组、结构体等)。{:#?}是美化版的Debug输出,常用于复杂结构的多行显示。
4 命名参数
ini
println!("{password} is {value}", password = "password",value=4);
输出 password is 4
5 变量插值
ini
let world = "world";
let name = "milk";
println!("Hello {world}!,My name is {name}!");
- 直接在
{}中使用变量名(无需显式传递参数),类似 Python 的f-string。
6 多参数与位置
arduino
println!("My name is {} ,My Age is {}", "Milk", 18)
输出 My name is Milk ,My Age is 18
- 多个
{}按顺序对应后面的参数
7 浮点数控制位数
arduino
println!("浮点数控制位数 : {:.2}",3.1415926)
输出3.24
- {:.2}保留两位小数
8 输出对应的16进制
arduino
println!("输出对应的16进制 : {:x}",255)
输出ff
9 输出对应的二进制
arduino
println!("输出对应的16进制 : {:b}",8)
输出1000
10 显示索引
arduino
println!("显示索引 : {1} {} {} {0}",10,20)
输出 显示索引 : 20 10 20 10
- {}中指定下标的为显示索引,按索引从后面的参数中取,{1}取得就是第二个参数 20
- {}中不指定下标的是普通占位符,按顺序取参数
11 格式化字符串中的宽度参数
arduino
println!("Hello {:5}!", "x"); // 输出: "Hello x !"
{:5}表示将参数x格式化为宽度为 5 的字符串,不足部分用空格填充。- 最终输出中,
x右侧有 4 个空格(总宽度为 5)。
arduino
println!("Hello {:1$}!", "x", 5); // 输出: "Hello x !"
{:1$}中的1$表示使用 ** 第二个参数(索引 1)** 作为宽度值,即5。- 等价于
{:5},但宽度值从参数列表动态获取。
arduino
println!("Hello {1:0$}!", 5, "x"); // 输出: "Hello x !"
{1:0$}中的1表示 ** 第二个参数(索引 1)** 是要格式化的值(即"x")。0$表示使用 ** 第一个参数(索引 0)** 作为宽度值(即5)。- 整体效果:将
"x"格式化为宽度为 5 的字符串。
12 字符串对齐与填充的高级控制
12.1 左对齐
arduino
println!("Hello {:<5}!", "x");
输出
Hello x !
{:<5}:显式指定左对齐 (<),宽度为 5。- 行为 :字符串
"x"居左,右侧补 4 个空格(总宽度 5)。
12.2 自定义填充符
arduino
println!("Hello {:-<5}!", "x")
输出
lua
Hello x----!
{:-<5}:左对齐(<),用-填充剩余宽度。- 行为 :字符串
"x"居左,右侧补 4 个-。
12.3 居中对齐
arduino
println!("Hello {:^5}!", "x")
输出
Hello x !
12.4 右对齐
arduino
println!("Hello {:>5}!", "x");
输出
Hello x!