3.5 `String`
05-
String — Comprehensive Rust2 分钟阅读
译文 · 基于 Comprehensive Rust
原文链接: https://google.github.io/comprehensive-rust/std-types/string.html
3.5 String
String 是可增长的 UTF-8 编码字符串:
| |
String 实现了 Deref<Target = str>,这意味着你可以在 String 上调用所有 str 方法。
String::new返回新的空字符串;若知道要推入多少数据,用String::with_capacity。String::len返回String的字节大小(可能与字符长度不同)。String::chars返回遍历实际字符的迭代器。注意:由于 字形簇(grapheme clusters),char可能与人类认为的「字符」不同。- 人们说「字符串」时,可能指
&str或String。- 当类型实现
Deref<Target = T>时,编译器会让你透明地调用T的方法。
- 我们还没讨论
Dereftrait,因此此时这主要解释了文档侧栏的结构。String实现了Deref<Target = str>,从而透明地获得对str方法的访问。- 写并比较
let s3 = s1.deref();与let s3 = &*s1;。String实现为字节向量的包装;你在向量上看到的许多操作在String上也支持,但带有一些额外保证。- 比较索引
String的不同方式:
- 用
s3.chars().nth(i).unwrap()取字符,其中i分别在界内、界外。- 用
s3[0..4]取子串,其中切片分别落在或不落在字符边界上。- 许多类型可用
to_string方法转成字符串。该 trait 会为所有实现了Display的类型自动实现,因此任何可格式化的东西也都能转成字符串。