跳到主要内容

Rust字符串

提示
  1. 字符串基础:Rust 中的字符串是 UTF-8 编码的 Unicode 字符序列,可以使用 String::from() 创建,存储在堆内存中,大小可动态调整。
  2. 可变性和切片:可使用 mut 关键字创建可变字符串,允许修改内容。字符串切片允许访问字符串的一部分,使用 & 符号表示引用。
  3. 字符串遍历和空字符串创建:使用 chars() 方法可以遍历字符串中的每个字符。String::new() 用于创建空字符串,可以随后通过 push_str() 方法追加内容。

Rust 中的字符串是以 UTF-8 编码的 Unicode 字符序列。例如,"Rust Programming" 是一个字符串,其中的每个字符都是有效的 Unicode 字符。比如 "R""u""s""t"" " 等等。

在 Rust 中创建字符串

我们可以使用 String::from() 方法创建一个具有默认值的字符串。例如,

// 创建一个具有默认值的字符串
let word = String::from("Hello, World!");

在这里,我们创建了一个新的字符串,并将其赋值给变量 word。我们还提供了一个默认值 "Hello, World!"

注意: 字符串在堆内存中分配,大小是动态的(可调整大小的)。因此,字符串的大小在编译时是未知的。

示例:在 Rust 中创建字符串

fn main() {
// 使用 String::from() 方法创建字符串
let word = String::from("Hello, World!");

println!("word = {}", word);
}

输出

word = Hello, World!

可变字符串在 Rust 中

我们可以通过在变量赋值前使用 mut 关键字来在 Rust 中创建一个可变字符串。例如,

// 可变字符串
let mut word = String::from("cat");

我们可以对这个字符串进行更改。

让我们看一个例子,

fn main() {
let mut word = String::from("cat");

println!("original string = {}", word);

// 在原始字符串的末尾添加新字符串
word.push_str(" dog");

println!("changed string = {}", word);
}

输出

original string = cat
changed string = cat dog

在这里,我们创建了一个可变变量 word,它保存了字符串 "cat"。然后我们使用 word.push_str(" dog"); 在原始字符串的末尾添加了一个新字符串。

在 Rust 中对字符串进行切片

我们可以在 Rust 中对字符串进行切片,以引用字符串的一部分。字符串切片允许我们引用字符串的一部分(一段)。例如,

fn main() {
let word = String::from("Hello, World!");

// 切片一个字符串
let slice = &word[0..5];

println!("string = {}", word);
println!("slice = {}", slice);
}

输出

string = Hello, World!
slice = Hello

这里,&word[0..5] 是切片字符串的表示法,用于引用变量 word 中存储的字符串,从起始索引 0(包含)到结束索引 5(不包含)。

切片语法中的 &(和号)表示这是一个字符串引用。它不是实际数据。

切片也用于访问存储在数组和向量中的数据部分。要了解更多关于 Rust 中的切片,请访问 Rust 切片

遍历字符串

我们可以使用字符串类型的 chars() 方法遍历一个字符串。例如,

fn main() {
let str = String::from("Hello");

// 使用 chars() 方法遍历字符串中的每个字符
for char in str.chars() {
println!("{}", char);
}
}

输出

H
e
l
l
o

在这里,我们使用 chars() 方法遍历所有字符,并打印每个字符。

使用 String::new() 创建空字符串

我们可以使用 String::new() 方法创建一个空字符串。例如,

// 创建一个空字符串
let mut word = String::new();

我们可以使用 push_str() 方法将字符串附加到 word 变量上。

word.push_str("Hello, World!");

在这里,我们将字符串 "Hello, World!" 推入空字符串变量 word

示例:使用 String::new() 创建空字符串

fn main() {
// 创建一个空字符串
let mut word = String::new();

println!("原始字符串 = {}", word);

// 将字符串附加到 word 变量上
word.push_str("Hello, World!");

println!("更改后的字符串 = {}", word);
}

输出

原始字符串 =
更改后的字符串 = Hello, World!

在这里,我们使用 String::new() 创建一个空字符串,并使用 push_str() 方法将字符串 "Hello, World!" 附加到原始字符串上。

常见问题

Rust 中 String 和 str 有什么区别?

在 Rust 中,我们可以将字符串分为两种类型:Stringstr

String

  • 是一种在堆数据结构中分配内存的数据类型。
  • 具有固定大小且可修改。

str

  • 是存储在内存中某处的字符串的视图。
  • 也被称为字符串切片,只能使用指针 &str 处理。要了解更多,请访问 Rust 切片

Rust 支持字符串索引吗?

根据设计,Rust 不支持字符串索引。如果我们尝试使用索引访问字符,将会得到错误。例如,

fn main() {
let str = "Hello";

println!("第一个字母 {}", str[0]); // 错误!!!
}