Rust中的字符串格式化方法及示例

在Rust中,有哪些常用的字符串格式化方法?能否给出一些实际示例,比如如何用format!宏、println!宏或其他方式将变量插入到字符串中?不同方法在性能和用法上有什么区别?

2 回复

Rust中常用format!宏进行字符串格式化:

let name = "Alice";
let age = 25;
let msg = format!("{}今年{}岁", name, age); // "Alice今年25岁"

// 指定参数位置
println!("{1}喜欢{0}", "苹果", name);

// 命名参数
println!("{name}的年龄是{age}", name=name, age=age);

// 控制小数位数
println!("π ≈ {:.2}", 3.14159); // "π ≈ 3.14"

还有print!println!eprint!等宏用于输出。


在 Rust 中,字符串格式化主要通过 format! 宏、println! 宏和 print! 宏实现,支持多种占位符和格式化选项。以下是常用方法及示例:

1. 基本格式化

使用 {} 占位符自动调用类型的 Display trait:

let name = "Alice";
let age = 25;
let s = format!("{} is {} years old.", name, age);
println!("{}", s); // 输出: Alice is 25 years old.

2. 调试输出

使用 {:?} 调用 Debug trait(适用于所有类型):

let list = vec![1, 2, 3];
println!("{:?}", list); // 输出: [1, 2, 3]

3. 位置参数

通过索引指定参数位置:

println!("{1} sees {0}", "Bob", "Alice"); // 输出: Alice sees Bob

4. 命名参数

使用变量名作为占位符:

println!("{name} likes {food}", name="Tom", food="pizza");

5. 格式化数字

  • 宽度与对齐
    {:5} 指定宽度为5,默认右对齐;{:<5} 左对齐;{:^6} 居中对齐。

    println!("{:5}", 42);    // 输出: "   42"
    println!("{:<5}", 42);   // 输出: "42   "
    
  • 精度控制
    {:.2} 保留两位小数:

    println!("{:.2}", 3.14159); // 输出: 3.14
    
  • 进制转换
    {:b} 二进制、{:x} 十六进制、{:o} 八进制:

    println!("{:b}", 10); // 输出: 1010
    

6. 填充与对齐

用指定字符填充(如 0):

println!("{:0>5}", 42);  // 输出: 00042
println!("{:0<5}", 42);  // 输出: 42000

7. 错误处理

格式化失败会触发编译时错误(如类型不匹配)。

完整示例

fn main() {
    let (x, y) = (5, 3.14159);
    println!(
        "x: {0:>4}, y: {1:.2}, hex: {0:x}, bin: {0:b}",
        x, y
    );
    // 输出: x:    5, y: 3.14, hex: 5, bin: 101
}

通过组合这些方法,可以灵活构建复杂格式的字符串。详细规则参考官方文档 std::fmt

回到顶部