rust string类型字符串拼接

举报
福州司马懿 发表于 2025/09/30 16:12:07 2025/09/30
【摘要】 在 Rust 中,字符串拼接有多种方法,主要取决于你使用的字符串类型(String 或 &str)以及具体场景。以下是常见的拼接方式: 1. 使用 push_str 方法(修改现有 String)适用于将 &str 追加到 String 末尾。let mut s = String::from("Hello");s.push_str(", world!"); // 追加 &strprintln...

在 Rust 中,字符串拼接有多种方法,主要取决于你使用的字符串类型(String&str)以及具体场景。以下是常见的拼接方式:


1. 使用 push_str 方法(修改现有 String

  • 适用于将 &str 追加到 String 末尾。
let mut s = String::from("Hello");
s.push_str(", world!"); // 追加 &str
println!("{}", s); // 输出: Hello, world!

2. 使用 + 运算符(所有权转移)

  • + 的左侧必须是 String,右侧是 &str,返回新的 String
  • 注意:左侧的 String 会被移动(所有权转移)。
let s1 = String::from("Hello");
let s2 = String::from(", world!");
let s3 = s1 + &s2; // s1 被移动,s2 借用
println!("{}", s3); // 输出: Hello, world!
// println!("{}", s1); // 错误:s1 已移动

3. 使用 format! 宏(推荐)

  • 类似 println!,但返回 String,不转移所有权。
  • 适合复杂拼接或混合类型。
let s1 = String::from("Hello");
let s2 = String::from(", world!");
let s3 = format!("{}{}", s1, s2); // 不转移 s1 和 s2 的所有权
println!("{}", s3); // 输出: Hello, world!
println!("{}", s1); // 仍可访问 s1

4. 使用 String+&str 链式拼接

  • 可以连续拼接多个 &strString
let mut s = String::from("Hello");
s += ", ";      // 追加 &str
s += "world!";  // 追加 &str
println!("{}", s); // 输出: Hello, world!

5. 拼接字符(push 方法)

  • 使用 push 追加单个字符(char)。
let mut s = String::from("Hello");
s.push('!'); // 追加字符
println!("{}", s); // 输出: Hello!

6. 高效拼接大量字符串(extend 或迭代器)

  • 使用 extend 批量追加字符串切片或字符。
let mut s = String::from("Hello");
let parts = vec![" ", "world", "!"];
s.extend(parts); // 追加多个 &str
println!("{}", s); // 输出: Hello world!

关键区别:

方法 所有权 适用场景
push_str 修改原 String 简单追加 &str
+ 转移左侧所有权 快速拼接(但需移动)
format! 不转移所有权 复杂或混合类型拼接
extend 修改原 String 批量追加

示例:混合类型拼接

let name = "Alice";
let age = 30;
let s = format!("Name: {}, Age: {}", name, age); // 自动调用 Display
println!("{}", s); // 输出: Name: Alice, Age: 30

根据需求选择合适的方法,format! 通常是通用且安全的选择。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。