Strings
Create a string with text you already know:
let alfa = String::from("apple");
Create an empty string. Probably want to make it mutable so you can add stuff to it.
let mut alfa = String::new();
Add text
alfa.push_str("pie");
Adding a single character with .push()
alfa.push("s");
Concationation -
Use format!()
which is like println!()
but it makes a new string instead of printing
to output.
#![allow(unused)] fn main() { let alfa = String::from("apple"); let bravo = String::from("berry"); let charlie = format!("{}{}", alfa, bravo); println!("{alfa} {bravo} {charlie}"); }
at some point put in the details about using
+
and how ownership works. This is for
a later chapter. For now just stick with
format!()
. Note that ownership of
alfa
gets moved to charlie
so it
can't be used in the println!()
#![allow(unused)] fn main() { let alfa = String::from("apple"); let bravo = String::from("berry"); let charlie = alfa + &bravo; println!("{bravo} {charlie}"); }
Iterating over a string with .chars()
#![allow(unused)] fn main() { let alfa = String::from("apple"); for character in alfa.chars() { println!("character is {character}"); } println!("alfa is {alfa}"); }
TODO: Go over why &alfa[0..4]
is tricky
because with UTF-8 that's 2 characters
in Russian.
Strings are always valid UTF-8
.replace
makes a new string, but it doesn't
take ownership so alfa
is still
available
#![allow(unused)] fn main() { let alfa = String::from("the quick fox"); let bravo = alfa.replace("quick", "slow"); println!("alfa is {alfa}"); println!("bravo is {bravo}"); }
.contains()
TODO: Figures out when to show as_str()
stuff.
#![allow(unused)] fn main() { let alfa = String::from("the quick fox"); let bravo = String::from("quick"); if alfa.contains(bravo.as_str()) { println!("found {bravo}"); } else { println!("did not find {bravo}"); } }