--- 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); } } ```