String Manipulation
Build and transform strings with push, push_str, +, format!, and capacity control.
Busca en todas las páginas de la documentación
Build and transform strings with push, push_str, +, format!, and capacity control.
fn join_parts(parts: &[&str]) -> String {
let mut out = String::new();
for (i, p) in parts.iter().enumerate() {
if i > 0 { out.push(' '); }
out.push_str(p);
}
out
}When to reach for this: Assembling output, normalizing text, builder patterns.
fn with_capacity_join(items: &[&str]) -> String {
let len: usize = items.iter().map(|s| s.len()).sum::<usize>() + items.len();
let mut s = String::with_capacity(len);
for (i, item) in items.iter().enumerate() {
if i > 0 { s.push(','); }
s.push_str(item);
}
s
}What this demonstrates:
with_capacity reduces reallocformat! in loop+ consumes left String - prefer push_strinsert, insert_str, replace, replacen, drain, clear, truncate (byte-based!). split, lines, trim.
s1 + &s2 moves s1 - Left operand consumed. Fix: format!("{s1}{s2}") or push_str.write! or push_str.| Alternative | Use When | Don't Use When |
|---|---|---|
format! | Few joins | Hot loop builder |
write! to String | fmt traits | Simple concat |
itertools::join | Iterator join | Already have Vec |
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+.
Revisado por Chris St. John·Última actualización: 16 jul 2026