3.14.2 String(字符串)

Rust 中的 String(字符串)是一个可增长的、UTF-8 编码的字符串类型。它可以存储和处理文本数据。这里是关于 Rust 字符串的一些详细信息:

1. 创建 String:

可以使用 String::new() 创建一个新的空字符串,或者使用 String::from() 从字符串字面量创建字符串。

#![allow(unused)]
fn main() {
let mut s = String::new();
let s = String::from("hello");
}

还可以使用 to_string() 方法将基本类型转换为字符串。

#![allow(unused)]
fn main() {
let num = 42;
let s = num.to_string();
}

2. 字符串长度:

字符串的长度是其 UTF-8 编码的字节的数量,而不是 Unicode 字符的数量。可以使用 len() 方法获取字符串的长度。

#![allow(unused)]
fn main() {
let len = s.len();
}

3. 字符串拼接:

有多种方法可以将字符串拼接在一起。例如,可以使用 + 运算符或 format! 宏。

#![allow(unused)]
fn main() {
let s1 = String::from("hello");
let s2 = String::from("world");
let s3 = s1 + " " + &s2;
}

或者使用 push_str() 方法将字符串附加到现有字符串。

#![allow(unused)]
fn main() {
let mut s = String::from("hello");
s.push_str(" world");
}

4. 访问字符:

由于 Rust 字符串是 UTF-8 编码的,不能直接使用索引访问单个字符。但是,可以使用迭代器遍历字符串中的字符。

#![allow(unused)]
fn main() {
for c in s.chars() {
    println!("{}", c);
}
}

还可以使用 bytes() 方法遍历字节,或者使用 char_indices() 方法获取字符及其对应的字节索引。

5.字符串切片:

可以使用范围语法创建字符串的切片,它表示原始字符串中一部分的引用。需要确保范围边界位于有效的 UTF-8 字符边界上,否则将导致运行时错误。

#![allow(unused)]
fn main() {
let s = String::from("hello");
let slice = &s[0..4]; // 获取字符串前 4 个字节的切片
}

6. 修改字符串:

可以使用 push() 方法将一个字符添加到字符串的末尾,或者使用 insert() 方法将字符插入指定的字节位置。

#![allow(unused)]
fn main() {
let mut s = String::from("hello");
s.push('!');
s.insert(5, ',');
}

注意,字符串插入操作可能需要 O(n) 时间,其中 n 是插入位置之后的字节数。

7. 删除字符串中的字符:

可以使用 pop() 方法删除并返回字符串末尾的字符,或者使用 remove() 方法删除并返回指定字节位置处的字符。

#![allow(unused)]
fn main() {
let mut s = String::from("hello");
s.pop();
s.remove(0);
}

Rust 的字符串处理非常关注编码安全性和性能,因此,与其他编程语言相比,某些操作可能有所不同。然而,这使得 Rust 能够提供安全、高效的字符串操作。