Skip to content

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"); // 追加 &str

4️⃣ 拼接字符串(最常用 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");   // 返回新 String
rust
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 {}       // move

5️⃣ 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 被 move

9️⃣ 长度与清空

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 日常开发速查表使用