# String. # Types. ## String (owned). Those are familiar strings. ```rust let text: String = String::from("Text!"); let text: String = "Text!".to_string(); ``` ## &str (slice). Those are slices. ```rust let text: &str = "Text!"; let text: String = "Text!".to_string(); let ref: &str = &text; ``` # Operations. ## Append. ```rust let mut s = String::from("foo"); s.push_str("bar"); ``` ## Format. ```rust let s1 = String::from("tic"); let s2 = String::from("tac"); let s3 = String::from("toe"); let s = format!("{s1}-{s2}-{s3}"); ``` ## Trim. ```rust fn trim_me(input: &str) -> String { input.trim().to_string() } ``` ## Replace. ```rust fn replace_me(input: &str) -> String { input.replace("cars", "balloons").to_string() } ``` ## Slice. ```rust let s = String::from("Здравствуйте"); let s = &s[0..4]; // Content is "Зд" - first 4 bytes (2 bytes per letter). ``` ## Iterate. ```rust // Iterate over UTF character vector. for c in "Зд".chars() {} // Iterate over UTF bytes. for c in "Зд".bytes() {} // To iterate over UTF letters you need to use an external crate. ``` ## Uppercase / Lowercase. ```rust let s = String::from("Hi there!"); let uppercase = s.to_uppercase(); let lowercase = s.to_lowercase(); ```