mirror of
https://github.com/alrayyes/wiki.git
synced 2024-11-22 11:36:23 +00:00
145 lines
2.5 KiB
Markdown
145 lines
2.5 KiB
Markdown
---
|
||
date: 2020-09-15
|
||
id: 490f0710-971d-4150-a339-4a8c2f5d19a8
|
||
title: Rust Strings
|
||
---
|
||
|
||
# Description
|
||
|
||
The `String` type, which is provided by Rust’s standard library rather
|
||
than coded into the core language, is a growable, mutable, owned, UTF-8
|
||
encoded string type. When Rustaceans refer to “strings” in Rust, they
|
||
usually mean the `String` and the string slice `&str` types, not just
|
||
one of those types. Although this section is largely about `String`,
|
||
both types are used heavily in Rust’s standard library, and both
|
||
`String` and string slices are UTF-8 encoded.
|
||
|
||
# Creating a New String
|
||
|
||
Many [Vector operations](20200915140449-vectors) are also available for
|
||
Strings.
|
||
|
||
``` rust
|
||
fn main() {
|
||
let mut s = String::new();
|
||
}
|
||
```
|
||
|
||
## to~string~
|
||
|
||
To generate a `String` with initial data we can use the
|
||
[to~string~](https://doc.rust-lang.org/std/string/trait.ToString.html#tymethod.to_string)
|
||
method:
|
||
|
||
``` rust
|
||
fn main() {
|
||
let data = "initial contents";
|
||
|
||
let s = data.to_string();
|
||
|
||
// the method also works on a literal directly:
|
||
let s = "initial contents".to_string();
|
||
}
|
||
```
|
||
|
||
## String::from
|
||
|
||
The same can be accomplished with `String::from`:
|
||
|
||
``` rust
|
||
fn main() {
|
||
let s = String::from("initial contents");
|
||
}
|
||
```
|
||
|
||
# Updating a String
|
||
|
||
## push~str~
|
||
|
||
``` rust
|
||
fn main() {
|
||
let mut s = String::from("foo");
|
||
s.push_str("bar");
|
||
|
||
println!("s is {}", s)
|
||
}
|
||
```
|
||
|
||
## push
|
||
|
||
`push` adds a single character to a string:
|
||
|
||
``` rust
|
||
fn main() {
|
||
let mut s = String::from("lo");
|
||
s.push('l');
|
||
|
||
println!("s is {}", s)
|
||
}
|
||
```
|
||
|
||
# Concatentation
|
||
|
||
``` rust
|
||
fn main() {
|
||
let s1 = String::from("Hello, ");
|
||
let s2 = String::from("world!");
|
||
let s3 = s1 + &s2; // note s1 has been moved here and can no longer be used
|
||
|
||
println!("s3 is {}", s3)
|
||
}
|
||
```
|
||
|
||
## Concatenate multiple strings
|
||
|
||
### With +
|
||
|
||
``` rust
|
||
fn main() {
|
||
let s1 = String::from("tic");
|
||
let s2 = String::from("tac");
|
||
let s3 = String::from("toe");
|
||
|
||
let s = s1 + "-" + &s2 + "-" + &s3;
|
||
|
||
println!("s is {}", s)
|
||
}
|
||
```
|
||
|
||
### With format!
|
||
|
||
``` rust
|
||
fn main() {
|
||
let s1 = String::from("tic");
|
||
let s2 = String::from("tac");
|
||
let s3 = String::from("toe");
|
||
|
||
let s = format!("{}-{}-{}", s1, s2, s3);
|
||
|
||
println!("s is {}", s)
|
||
}
|
||
```
|
||
|
||
# Iteration
|
||
|
||
## Chars
|
||
|
||
``` rust
|
||
#![allow(unused)]
|
||
fn main() {
|
||
for c in "नमस्ते".chars() {
|
||
println!("{}", c);
|
||
}
|
||
}
|
||
```
|
||
|
||
## Bytes
|
||
|
||
``` rust
|
||
#![allow(unused)]
|
||
fn main() {
|
||
for b in "नमस्ते".bytes() {
|
||
println!("{}", b);
|
||
}
|
||
}
|
||
```
|