2022-12-21 16:36:30 +01:00
|
|
|
# String
|
|
|
|
|
|
|
|
[`String`][1] is the standard heap-allocated growable UTF-8 string buffer:
|
|
|
|
|
|
|
|
```rust,editable
|
|
|
|
fn main() {
|
|
|
|
let mut s1 = String::new();
|
|
|
|
s1.push_str("Hello");
|
|
|
|
println!("s1: len = {}, capacity = {}", s1.len(), s1.capacity());
|
|
|
|
|
|
|
|
let mut s2 = String::with_capacity(s1.len() + 1);
|
|
|
|
s2.push_str(&s1);
|
|
|
|
s2.push('!');
|
|
|
|
println!("s2: len = {}, capacity = {}", s2.len(), s2.capacity());
|
2023-01-10 19:06:06 +01:00
|
|
|
|
|
|
|
let s3 = String::from("🇨🇭");
|
|
|
|
println!("s3: len = {}, number of chars = {}", s3.len(),
|
2023-01-10 19:54:48 +01:00
|
|
|
s3.chars().count());
|
2022-12-21 16:36:30 +01:00
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
`String` implements [`Deref<Target = str>`][2], which means that you can call all
|
|
|
|
`str` methods on a `String`.
|
|
|
|
|
|
|
|
[1]: https://doc.rust-lang.org/std/string/struct.String.html
|
|
|
|
[2]: https://doc.rust-lang.org/std/string/struct.String.html#deref-methods-str
|
2023-01-10 19:06:06 +01:00
|
|
|
|
|
|
|
<details>
|
|
|
|
|
|
|
|
* `len` returns the size of the `String` in bytes, not its length in characters.
|
|
|
|
* `chars` returns an iterator over the actual characters.
|
|
|
|
* `String` implements `Deref<Target = str>` which transparently gives it access to `str`'s methods.
|
|
|
|
|
|
|
|
</details>
|