在Rust中,字符串有两个主要类型:String 和 &str。它们分别表示可变和不可变的字符串。让我们看看它们的基本用法。

不可变字符串:&str

&str 是一个不可变的字符串切片。它通常用于引用字符串字面量和其他字符串数据。
fn main() {
    // 字符串字面量是不可变的 str
    let greeting: &str = "Hello, Rust!";

    // 使用 String::from 创建一个可变的 String
    let name = String::from("Alice");

    // 合并字符串切片和 String
    let message = greeting.to_string() + " " + name.as_str();

    println!("{}", message);
}

可变字符串:String

String 是一个可变的、堆分配的字符串类型。它允许动态地增加或减少字符串的大小。
fn main() {
    // 创建一个空的 String
    let mut my_string = String::new();

    // 使用 push_str 和 push 方法追加字符串
    my_string.push_str("Hello, ");
    my_string.push_str("Rust!");

    // 使用 format! 宏构建字符串
    let name = "Bob";
    let greeting = format!("{} {}!", my_string, name);

    println!("{}", greeting);
}

Rust 中的字符串是UTF-8编码的,这意味着它们可以包含任何Unicode字符。

字符串切片和索引

可以使用切片语法获取字符串的一部分:
fn main() {
    let full_string = "Hello, Rust!";
    
    // 字符串切片
    let slice = &full_string[0..5];  // "Hello"
    
    println!("{}", slice);
}

请注意,Rust 的字符串是Unicode的,因此直接通过索引获取字符并不总是可行的,因为一个字符可能占用多个字节。要遍历字符串的字符,可以使用字符迭代器:
fn main() {
    let full_string = "Hello, Rust!";

    for c in full_string.chars() {
        println!("{}", c);
    }
}

这是一些关于Rust字符串基础的简要介绍。Rust的字符串处理还涉及到更多的概念,如字符串切片、编码处理等。


转载请注明出处:http://www.zyzy.cn/article/detail/6800/Rust