Rust 字符串基本使用教程及代码演示

发布于:2024-04-27 ⋅ 阅读:(29) ⋅ 点赞:(0)

一、基本使用教程

在Rust中,字符串是编程中非常基础且重要的部分。Rust提供了两种主要的字符串类型:String&str。本教程将带你了解Rust中字符串的基本概念和操作。

1、字符串类型

String

String是一个可增长的、拥有所有权的、UTF-8编码的字符串类型。它在堆上分配内存,因此可以动态地增加或减少其长度。

&str

&str是一个字符串切片,它是一个指向某个字符串数据的引用。它不拥有数据,因此是不可变的。

2、创建字符串

创建String

let mut s = String::new(); // 创建一个空的String
s.push_str("Hello, Rust!"); // 向String中添加内容

创建&str

let data = "Hello, Rust!";
let s = &data; // 创建一个指向data的字符串切片

3、字符串操作

索引

在Rust中,字符串不能通过索引直接访问单个字符,因为它们是UTF-8编码的。但是,可以使用chars()方法迭代字符。

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

切片

可以使用切片操作来获取字符串的一部分。

let s = String::from("Hello, Rust!");
let slice = &s[7..12]; // 获取"Rust"这个切片

格式化

使用format!宏可以创建格式化的字符串。

let name = "World";
let greeting = format!("Hello, {}!", name);

字符串比较

字符串可以使用==!=运算符进行比较。

assert_eq!("Hello", "Hello");
assert_ne!("Hello", "hello");

4、字符串和集合

字符串可以很容易地被放入集合中,如VecHashSet

let mut words = vec!["Rust", "is", "awesome"];
words.push("and");

5、字符串的错误处理

在处理字符串时,可能会遇到一些错误,例如:

  • IndexError:尝试访问不存在的索引
  • Utf8Error:处理非UTF-8编码的字节序列

6、参考链接

二、代码演示

1、代码演示

fn main() {
    // 创建String和&str
    let mut s = String::new();
    s.push_str("Hello, Rust!");
    let s_slice: &str = "Hello, Rust!";

    // 索引和切片
    for c in s.chars() {
        println!("{}", c);
    }
    let slice = &s[7..12]; // 应输出 "Rust"
    println!("{}", slice);

    // 格式化字符串
    let name = "World";
    let greeting = format!("Hello, {}!", name);
    println!("{}", greeting); // 应输出 "Hello, World!"

    // 字符串比较
    assert_eq!(s_slice, "Hello, Rust!");
    assert_ne!(s_slice, "hello, Rust!");

    // 字符串和集合
    let mut words = vec!["Rust", "is", "awesome"];
    words.push("and");
    assert_eq!(words, vec!["Rust", "is", "awesome", "and"]);

    // 测试字符串的错误处理
    // 注意:以下代码将会引发错误,仅作为示例,不应在实际代码中使用
    // let error_slice = &s[12..20]; // 这将引发panic,因为索引越界
    // println!("{}", error_slice);

    println!("All tests passed!");
}

2、执行结果

C:/Users/Administrator/.cargo/bin/cargo.exe run --color=always --package hello --bin hello
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s
     Running `target\debug\hello.exe`
H
e
l
l
o
,                
                 
R                
u                
s                
t                
!                
Rust!            
Hello, World!    
All tests passed!

进程已结束,退出代码为 0