此页内容

字符串与切片

鹏展博

429字约1分钟

2022-06-03

切片

切片 是对集合中的部分引用 。

字符串切片 即是 对字符串类型的部分引用

字符串字面量字符串切片

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 编码