Rust 中的字符串类型:`&str` 和 `String`

Rust 中的字符串类型:&strString


在 Rust 编程语言中,有两种主要的字符串类型: &strString。这两种类型在不同的场景下有不同的用途和特性。

1. &str:不可变的字符串引用

&str字符串切片类型,它是对已有字符串的引用。通常用于引用固定的字符串字面量或者 String 对象的切片。以下是 &str 的主要特性:

  • 不可变性&str 类型的字符串是不可变的,一旦创建就不能修改其内容。
  • 静态分配&str 类型的字符串的大小在编译时已知,并且通常存储在只读内存中。
  • 不拥有所有权&str 只是对字符串的引用,并不拥有它的所有权。因此,它不负责内存管理。
fn main() {
    // 创建字符串切片
    let static_str: &str = "hello world";

    // 创建字符串切片的引用
    let static_str_ref: &str = &static_str;

    // 打印字符串切片
    println!("Static string slice: {}", static_str);
    println!("Static string slice reference: {}", static_str_ref);
}

运行结果:

Static string slice: hello world
Static string slice reference: hello world

&str 通常用于函数参数、表示静态的不可变字符串以及字符串切片的处理。

2. String:可变的字符串

String动态字符串类型,它是一个堆上分配的可变的字符串。以下是 String 的主要特性:

  • 可变性String 类型的字符串是可变的,其大小在运行时可以动态变化。因此,你可以修改其内容和大小。
  • 动态分配String 类型的字符串的内存是在堆上动态分配的,可以根据需要动态增长。
  • 拥有所有权String 对象拥有其所包含字符串的所有权,并负责其内存的管理。因此,它负责分配和释放内存。
fn main() {
    // 创建动态字符串
    let mut dynamic_string = String::from("hello");

    // 追加字符串内容
    dynamic_string.push_str(", world");

    // 打印动态字符串
    println!("Dynamic string: {}", dynamic_string);
}

运行结果:

Dynamic string: hello, world

String 通常用于需要动态创建、修改和拥有的字符串,以及对字符串进行各种操作和处理

总的来说,&strString 两种字符串类型各有其特点,你可以根据具体需求选择合适的类型来处理字符串。

3、字符串使用综合案例

代码

fn main() {
    // 使用字符串字面量创建静态字符串
    let static_str = "hello world";

    // 使用 String::from() 方法从字符串字面量创建动态字符串
    let dynamic_str_from = String::from("hello");

    // 使用 to_string() 方法从其他类型创建动态字符串
    let num = 42;
    let num_to_string = num.to_string();

    // 使用 String::new() 方法创建空的动态字符串
    let mut empty_str = String::new();
    empty_str.push_str("hello 111");
    empty_str.push_str(" world");

    // 使用 format! 宏创建格式化的字符串
    let formatted_str = format!("The answer is {}", 42);

    // 使用 String::with_capacity() 方法创建具有指定容量的空字符串
    let mut str_with_capacity = String::with_capacity(10);
    str_with_capacity.push_str("0123456789");
    // 不会报错:即使指定了容量为10,push_str() 方法会自动重新分配更大的内存空间来容纳更多的数据。
    str_with_capacity.push_str("1111111");

    // 演示字符串创建的结果
    println!("Static string: {}", static_str);
    println!("Dynamic string from string literal: {}", dynamic_str_from);
    println!("String from number: {}", num_to_string);
    println!("Empty string: {}", empty_str);
    println!("Formatted string: {}", formatted_str);
    println!("String with capacity: {:?}", str_with_capacity);
}

执行结果

C:/Users/Administrator/.cargo/bin/cargo.exe run --color=always --package hello-rust --bin hello-rust
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s
     Running `target\debug\hello-rust.exe`
Static string: hello world                
Dynamic string from string literal: hello 
String from number: 42                    
Empty string: hello 111 world             
Formatted string: The answer is 42        
String with capacity: "01234567891111111" 

进程已结束,退出代码为 0
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Rust字符串是一个动态可变的数据类型,称为`String`。通过`String`类型,我们可以创建、修改、操作和处理字符串。 在Rust,有多种方法可以创建`String`。最常见的方法是使用`format!`宏来构建一个字符串,或者通过`to_string()`方法将其他类型转换为字符串。 ```rust let hello = "Hello".to_string(); let world = String::from("World"); let message = format!("{} {}", hello, world); ``` `String`类型与基本类型(`&str`)之间可以互相转换。使用`&`运算符可以获取`String`类型的引用,而通过使用像`to_string()`这样的方法,可以将`&str`转换为`String`。 ```rust let hello: &str = "Hello"; let hello_string: String = hello.to_string(); ``` 在Rust,可以使用`+`运算符将两个字符串连接起来,或使用`push_str`方法将一个字符串附加到另一个字符串上。这两种方法都会创建一个新的`String`对象。 ```rust let hello = String::from("Hello"); let world = String::from("World"); let hello_world = hello + &world; // 可以使用&运算符获取world的引用 ``` 当需要修改字符串时,Rust提供了很多有用的方法。我们可以使用`replace`方法来替换子字符串,使用`trim`方法来去除字符串两侧的空格,使用`split`方法将字符串拆分为多个部分等等。 ```rust let message = String::from("Hello World"); let replaced = message.replace("World", "Rust"); let trimmed = message.trim(); let mut parts = message.split_whitespace(); ``` 总之,Rust的`String`类型提供了许多功能强大且安全的方法来创建、操作和处理字符串。它的灵活性和性能使得在处理字符串时可以更加方便、高效地进行操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值