字符串与切片
切片
切片 是对集合中的部分引用 。
字符串切片 即是 对字符串类型的部分引用
字符串字面量 即 字符串切片
fn main() {
let s: &str = "hello world"; // 字符串字面量即字符串切片,类型为 &str
let s1 = String::from("hello world");
let s2: &str = &s1[0..5]; // 切片通过 Range序列 引用
let s3: &str = &s1[..5]; // 如果起始位是 0,可以省略
let s4: &str = &s1[6..]; // 如果结尾是字符串结尾,可以省略
println!("s2: {}, s3: {}, s4: {}", s2, s3, s4);
}
字符串
字符串是由字符组成的连续集合。
Rust 中的字符是 Unicode 类型,因此每个字符占据 4 个字节内存空间,但是在字符串中不一样,字符串是 UTF-8 编码,也就是字符串中的字符所占的字节数是变化的(1 - 4),这样有助于大幅降低字符串所占用的内存空间。
Rust 在语言级别,只有一种字符串类型: str
,它通常是以引用类型出现 &str
,也就是上文提到的字符串切片。虽然语言级别只有上述的 str
类型,但是在标准库里,还有多种不同用途的字符串类型,其中使用最广的即是 String
类型。
str
类型是硬编码进可执行文件,也无法被修改,但是 String
则是一个可增长、可改变且具有所有权的 UTF-8 编码字符串,当 Rust 用户提到字符串时,往往指的就是 String
类型和 &str
字符串切片类型,这两个类型都是 UTF-8 编码。