织梦做的网站怎么会被黑,咪豆建站,自己做的网站设定背景图像,简易php企业网站源码Rust学习笔记_05——控制流(1) Rust学习笔记_06——控制流(2) Rust学习笔记_07——枚举和范围 文章目录 字符串类型1. 字符串类型与字面量字符串1.1 字符串类型 (String)1.2 字面量字符串 (static str) 2. #xff08;字符串类型#xff09;创建3. #xff08;字符串类…Rust学习笔记_05——控制流(1) Rust学习笔记_06——控制流(2) Rust学习笔记_07——枚举和范围 文章目录 字符串类型1. 字符串类型与字面量字符串1.1 字符串类型 (String)1.2 字面量字符串 (static str) 2. 字符串类型创建3. 字符串类型切片4. 字符串类型更新5. 字符串类型遍历6. 字符串类型拼接 字符串类型
Rust 语言中的字符串类型是其数据类型的核心部分之一用于处理文本数据。Rust 的字符串类型提供了高效且安全的方式来操作文本。在 Rust 中字符串是不可变的immutable默认情况下但可以声明为可变mutable。Rust 使用 UTF-8 编码来处理字符串这意味着它可以处理几乎任何语言的字符。
1. 字符串类型与字面量字符串
字符串类型和字面量字符串是两个不同的概念尽管它们都与文本数据相关但它们在内存管理、可变性和用途上有所不同。
1.1 字符串类型 (String)
内存管理String 类型是一个堆分配heap-allocated的字符串这意味着它可以在运行时动态地增长和缩小。它负责自己分配的内存并在不再需要时自动释放通过 Rust 的所有权系统。可变性默认情况下String 是可变的尽管你可以通过引用使其不可变。这意味着你可以修改它的内容例如添加、删除或替换字符。用途String 通常用于需要在运行时构建、修改或存储文本数据的场景。所有权String 拥有它所包含的数据并且遵循 Rust 的所有权规则。当 String 超出作用域或被显式丢弃时它所拥有的内存将被释放。
1.2 字面量字符串 (static str)
内存管理字面量字符串是静态分配的statically allocated这意味着它们在编译时就被确定并存储在程序的二进制文件中。它们通常被存储在只读内存段中。不可变性字面量字符串是不可变的。你不能修改它们的内容。用途字面量字符串通常用于定义常量文本如函数参数、配置值或硬编码的消息。由于它们是编译时常量因此非常适合用于这些场景。借用和生命周期字面量字符串被表示为对静态分配内存的不可变借用static str。这里的 static 生命周期表示这个借用与整个程序的生命周期一样长因为字面量字符串在程序运行期间始终存在。
2. 字符串类型创建
你可以使用 String::from 函数或 to_string 方法从字符串字面量或其他类型的字符串表示中创建 String
let s1 String::from(Hello, world!);
let s2 Hello.to_string();3. 字符串类型切片
字符串切片是对字符串的某一部分的不可变引用。字符串切片是 UTF-8 编码的并且通常从字符串字面量或 String 中获得。字符串切片是轻量级的因为它们不拥有数据.
let s String::from(Hello, world!);
let slice s[0..5]; // 创建一个指向 Hello 的切片4. 字符串类型更新
由于 String 是可增长的可以通过方法如 push_str 或 push 来修改它
let mut s String::from(Hello, );let s2 String::from(world!22);s.push_str(world!);let hello Hello: ;// s.push(hello); // 注意这里会编译失败因为 hello 是不可变的而 push 需要一个可变的 str// 正确做法let hello_mut: mut str mut Hello: .to_string(); // 这行代码在实际代码中是不常见的只是为了说明// s.push(hello_mut); // 这行代码也是不正确的因为 hello_mut 的生命周期很短// 正确的更新方式是使用 format! 宏或其他字符串处理方法s.push(\n);s.push_str(Hello: );s.push_str(s2);println!({}, s);输出结果
Hello, world!
Hello: world!225. 字符串类型遍历
Rust 提供了多种遍历字符串的方法包括按字节、字符
let text String::from(hello 你好);// 按字节遍历
for byte in text.bytes() {print!({:02x} , byte);
}
println!();// 按字符遍历注意这可能不是 Unicode 感知的
for char in text.chars() {print!({} , char);
}
println!();6. 字符串类型拼接
你可以使用 操作符来拼接两个 String 值但注意这会创建一个新的 String 分配
let s1 String::from(Hello, );
let s2 String::from(world!);
let s3 s1 s2;
// 注意这里 s2 是必要的因为 需要一个 String即 str和一个 String更常见的做法是使用 format! 宏它提供了更强大和灵活的字符串格式化功能
let s1 String::from(Hello, );
let s2 String::from(world!);
let s3 format!({}{}, s1, s2);