Strings Basics
7 examples - 5 basic, 2 intermediate - for String and &str.
Prerequisites
Basic Examples
1. &str Literal
fn main() {
let s: &str = "hello";
println!("{s}");
}- UTF-8 slice into binary
&'static strfor literals
2. String Owned
fn main() {
let mut s = String::from("hello");
s.push_str(" world");
}- Heap-allocated UTF-8
- Growable buffer
3. Borrow with &str
fn greet(name: &str) { println!("Hello, {name}"); }
fn main() { greet("Ada"); greet(&String::from("Bob")); }- APIs take
&strfor flexibility
4. push and push_str
let mut s = String::new();
s.push('!');
s.push_str("ok");5. len vs chars().count()
let s = "🦀";
assert_eq!(s.len(), 4); // bytes
assert_eq!(s.chars().count(), 1);Related: UTF-8 & Indexing
Intermediate Examples
6. format!
let msg = format!("{} {}", "hello", 42);7. into() conversions
let owned: String = "x".into();
let slice: &str = &owned;Related: Strings Best Practices
Stack versions: This page was written for Rust 1.97.0 (edition 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4, and Polars 0.46+.