主题
Rust 常用字符串 & 数组方法速查|带例子可复习版
⚠️ 本文分两层:
- 1️⃣ 前半部分:全量方法速览(查表用)
- 2️⃣ 后半部分:高频方法 + 示例解释(理解用)
这篇文章不是“API 罗列”,而是 只总结你在实际开发中 80% 会反复用到的方法。
每个方法都配 最小可理解示例,目标是: 👉 查得到、看得懂、用得对。
一、字符串(String / &str)方法【全量速览表】
本表用于 快速确认:有没有这个方法 / 叫什么名字。 具体用法与坑点在后文详细解释。
1️⃣ 创建 / 转换
| 方法 | 作用 |
|---|---|
String::new() | 创建空 String |
String::from(&str) | 从字面量创建 |
to_string() | &str → String |
to_owned() | &str → String |
as_str() | String → &str |
2️⃣ 长度 / 状态
| 方法 | 作用 |
|---|---|
len() | 字节长度 |
is_empty() | 是否为空 |
capacity() | 当前容量 |
3️⃣ 修改(需要 mut String)
| 方法 | 作用 |
|---|---|
push(char) | 追加字符 |
push_str(&str) | 追加字符串 |
pop() | 删除末尾字符 |
clear() | 清空 |
truncate(n) | 截断到 n 字节 |
replace_range(r, &str) | 替换指定字节区间 |
4️⃣ 拼接 / 生成新字符串
| 方法 | 作用 |
|---|---|
format! | 安全拼接(推荐) |
+ | 拼接并 move 左值 |
.concat() | 集合拼接 |
concat! | 编译期拼接 |
repeat(n) | 重复字符串 |
5️⃣ 查找 / 判断
| 方法 | 作用 |
|---|---|
contains() | 是否包含 |
starts_with() | 前缀判断 |
ends_with() | 后缀判断 |
find() | 查找位置 |
rfind() | 从右查找 |
6️⃣ 分割 / 替换
| 方法 | 作用 |
|---|---|
split() | 分割 |
split_whitespace() | 按空白分割 |
splitn() | 限制次数分割 |
replace() | 替换(生成新 String) |
trim() | 去首尾空白 |
trim_start() | 去前空白 |
trim_end() | 去后空白 |
7️⃣ 大小写 / 规范化(容易遗漏但很常用)
| 方法 | 作用 |
|---|---|
to_uppercase() | 转大写(Unicode) |
to_lowercase() | 转小写(Unicode) |
make_ascii_uppercase() | ASCII 就地转大写 |
make_ascii_lowercase() | ASCII 就地转小写 |
eq_ignore_ascii_case() | 忽略 ASCII 大小写比较 |
8️⃣ 遍历
| 方法 | 说明 |
|---|---|
bytes() | UTF-8 字节 |
chars() | Unicode 标量 |
graphemes() | 用户感知字符 |
二、数组 / Vec 方法【全量速览表】
1️⃣ 创建
| 方法 | 说明 |
|---|---|
[T; N] | 固定长度数组 |
vec![] | 创建 Vec |
Vec::new() | 空 Vec |
Vec::with_capacity() | 指定容量 |
2️⃣ 访问
| 方法 | 说明 |
|---|---|
v[i] | 直接索引(可能 panic) |
get(i) | 返回 Option |
first() / last() | 首尾元素 |
3️⃣ 修改
| 方法 | 说明 |
|---|---|
push() | 追加 |
pop() | 弹出 |
insert() | 指定位置插入 |
remove() | 删除并返回 |
clear() | 清空 |
extend() | 拼接 Vec |
4️⃣ 查询 / 判断
| 方法 | 说明 |
|---|---|
len() | 长度 |
is_empty() | 是否为空 |
contains() | 是否包含 |
5️⃣ 遍历 / 变换(Iterator)
| 方法 | 说明 |
|---|---|
iter() | 不可变迭代 |
iter_mut() | 可变迭代 |
into_iter() | 获取所有权 |
map() | 映射 |
filter() | 过滤 |
collect() | 收集 |
6️⃣ 排序
| 方法 | 说明 |
|---|---|
sort() | 升序 |
sort_by() | 自定义排序 |
sort_by_key() | 按 key 排序 |
三、字符串(String / &str)常用方法(示例解释)
本节专门解释最容易遗漏、但真实业务里经常用到的方法。
1️⃣ 大小写转换(非常高频)
rust
let s = "Hello Rust";
let upper = s.to_uppercase();
let lower = s.to_lowercase();⚠️ 重点理解:
- 返回的是 新 String
- 遵循 Unicode 规则(不只是 ASCII)
2️⃣ ASCII 大小写(性能 / 协议场景)
rust
let mut s = String::from("hello");
s.make_ascii_uppercase();
// s = "HELLO"适合:
- HTTP Header
- 协议字段
- 明确只包含 ASCII 的场景
3️⃣ 忽略大小写比较
rust
let a = "rust";
let b = "RUST";
assert!(a.eq_ignore_ascii_case(b));先记住一句话:
Rust 的字符串 = UTF-8 + 所有权 + 不可索引
1️⃣ 创建与转换
rust
let s1 = String::new();
let s2 = String::from("hello");
let s3 = "hello".to_string();
let s4 = "hello".to_owned();使用建议:
- 字面量 →
to_string()/to_owned() - 明确创建 →
String::from()
2️⃣ 长度与判空
rust
let s = String::from("hello");
s.len(); // 字节长度
s.is_empty(); // 是否为空⚠️ 注意:
len()≠ 字符数- emoji 会占多个字节
3️⃣ 追加内容(修改原 String)
rust
let mut s = String::from("hello");
s.push('!'); // 追加 char
s.push_str(" rust"); // 追加 &str4️⃣ 拼接字符串(最常用 3 种)
✅ format!(首选)
rust
let a = "hello";
let b = "rust";
let s = format!("{} {}", a, b);- 不转移所有权
- 可读性最好
⚠️ + 运算符(不推荐新手)
rust
let a = String::from("hello ");
let b = String::from("rust");
let c = a + &b; // a 被 move.concat()(集合场景)
rust
let s = ["a", "b", "c"].concat();concat!(编译期宏)
rust
let s = concat!("a", "b", "c");⚠️ 只能拼接字面量
5️⃣ 切片(&str)
rust
let s = String::from("hello rust");
let sub = &s[0..5];⚠️ 必须是 UTF-8 边界
6️⃣ 查找 / 判断
rust
let s = "hello rust";
s.contains("rust");
s.starts_with("hello");
s.ends_with("rust");7️⃣ 替换与清理
rust
let s = "hello rust";
s.replace("rust", "world"); // 返回新 Stringrust
let mut s = String::from("hello");
s.clear();8️⃣ 分割与组合
rust
let s = "a,b,c";
let v: Vec<&str> = s.split(',').collect();rust
let joined = v.join("-");9️⃣ 遍历字符串(3 种视角)
rust
for b in "abc".bytes() {}
for c in "🥺".chars() {}
for g in "🧑🦳".graphemes(true) {}二、数组 & Vec 常用方法
Rust 实际开发中 Vec 用得远多于数组。
1️⃣ 创建
rust
let a = [1, 2, 3];
let v = vec![1, 2, 3];2️⃣ 访问元素
rust
v[0]; // 可能 panic
v.get(0); // Option<&T>推荐:
rust
if let Some(x) = v.get(0) {}3️⃣ 增删元素
rust
let mut v = vec![1, 2];
v.push(3);
v.pop();4️⃣ 遍历
rust
for x in &v {} // 借用
for x in &mut v {} // 可变借用
for x in v {} // move5️⃣ map / filter / collect(核心)
rust
let v = vec![1, 2, 3, 4];
let v2: Vec<i32> = v
.iter()
.map(|x| x * 2)
.filter(|x| *x > 4)
.collect();6️⃣ 查找与判断
rust
v.contains(&3);
v.iter().any(|x| *x > 2);
v.iter().all(|x| *x > 0);7️⃣ 排序
rust
v.sort();
v.sort_by(|a, b| b.cmp(a));8️⃣ 拼接 Vec
rust
let mut a = vec![1, 2];
let b = vec![3, 4];
a.extend(b); // b 被 move9️⃣ 长度与清空
rust
v.len();
v.is_empty();
v.clear();三、字符串 + Vec 组合实战
rust
let s = "a-b-c";
let result = s
.split('-')
.map(|x| x.to_uppercase())
.collect::<Vec<String>>()
.join(",");
// 输出:A,B,C四、总结速记
字符串
- 拼接:
format!✅ - 遍历字符:
.chars()/.graphemes() - 分割:
split + collect + join
Vec
- 安全访问:
get - 变换:
iter + map + filter + collect - 修改:
push / pop / extend
这篇文章可以当 Rust 日常开发速查表使用