You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rust中用format!宏生成无换行空格的格式化多行原始字符串?

解决方案

原生方法:手动控制缩进与换行

如果不想引入第三方库,有两种思路解决问题:

方式1:顶格编写原始字符串

直接把多行字符串内容顶格书写,既保留原始字符串无需转义引号、不用行末反斜杠的优势,又不会产生多余前置空格:

fn main() {
    let name = "Alice";
    let age = 30;
    let msg = format!(r#"Hello, my name is {name}.
I'm {age} years old.
I love writing Rust code!"#);
    
    println!("{}", msg);
}

输出结果:

Hello, my name is Alice.
I'm 30 years old.
I love writing Rust code!

方式2:处理带缩进的原始字符串

如果为了代码结构美观必须给字符串加缩进,可以通过字符串方法去除多余空白:

fn main() {
    let name = "Bob";
    let age = 25;
    let raw_str = r#"
        Hello, {name},
        You are {age} years old.
        Glad to see you!
    "#;
    
    // 先去掉开头换行,再逐行修剪前置空格后重新拼接
    let processed_str = raw_str
        .trim_start()
        .lines()
        .map(|line| line.trim_start())
        .collect::<Vec<_>>()
        .join("\n");
    
    let msg = format!(processed_str);
    println!("{}", msg);
}

输出结果:

Hello, Bob,
You are 25 years old.
Glad to see you!

第三方库方案:使用indoc crate(推荐)

indoc是专门处理缩进多行字符串的Rust库,能自动去除每行的共同前置缩进,同时保留原始字符串的所有优势,是最省心的方案。

步骤1:添加依赖到Cargo.toml

[dependencies]
indoc = "2.0"

步骤2:用indoc!宏处理字符串

use indoc::indoc;

fn main() {
    let name = "Charlie";
    let age = 35;
    let msg = format!(indoc! {r#"
        Hello, {name},
        Your age is {age}.
        This string has proper indentation in code,
        but no extra spaces in output!
    "#});
    
    println!("{}", msg);
}

输出结果:

Hello, Charlie,
Your age is 35.
This string has proper indentation in code,
but no extra spaces in output!

内容的提问来源于stack exchange,提问作者user2138149

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 12:47:12