Rust 中的 String(字符串)

更新于 2026-01-15

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 关键字来创建一个可变字符串。例如:

// 可变字符串
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 中的字符串切片(String Slicing)

我们可以对 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 中的切片(Slice),请参阅 Rust Slice

遍历字符串

我们可以使用字符串类型的 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!("original string = {}", word);
    
    // 向 word 变量追加一个字符串
    word.push_str("Hello, World!");

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

输出

original string = 
changed string = Hello, World!

在这里,我们使用 String::new() 创建了一个空字符串,并使用 push_str() 方法向原始字符串中追加了字符串 "Hello, World!"