Skip to content

Format strings

A Rust format string mixes literal text with replacement fields. The smallest field is {}: it selects the next argument and formats it with Display.

EXAMPLE: CI-CHECKEDTEST ASSERTED · examples/format-output/src/reference_examples.rs#format-basic
assert_eq!(format!("Hello, {}!", "Rust"), "Hello, Rust!");

The official grammar defines a field as an optional argument followed by an optional format specification:

Format specification grammar
{ [argument] [ : [[fill]align][sign][#][0][width][.precision][type] ] }

The colon only introduces formatting options. With no explicit argument, Rust consumes the next argument. An integer selects a positional argument; an identifier selects a named argument or captures a variable from scope.

EXAMPLE: CI-CHECKEDTEST ASSERTED · examples/format-output/src/reference_examples.rs#format-arguments
let language = "Rust";
assert_eq!(format!("{language} {0}", "prints"), "Rust prints");

Width is a minimum, not a forced size. Short values are padded; longer values remain intact.

EXAMPLE: CI-CHECKEDTEST ASSERTED · examples/format-output/src/reference_examples.rs#format-width
assert_eq!(format!("|{:>8}|", "rust"), "|    rust|");
assert_eq!(format!("|{:*^8}|", "rust"), "|**rust**|");

Width can come from another usize argument by adding $:

EXAMPLE: CI-CHECKEDTEST ASSERTED · examples/format-output/src/reference_examples.rs#format-dynamic-width
assert_eq!(format!("|{:width$}|", "rust", width = 8), "|rust    |");

Precision means decimal places for floating-point values and maximum output width for strings. Integral formatters ignore it.

EXAMPLE: CI-CHECKEDTEST ASSERTED · examples/format-output/src/reference_examples.rs#format-precision
assert_eq!(format!("{:.2}", 3.14159), "3.14");
assert_eq!(format!("{:.4}", "rustacean"), "rust");

Double a brace to emit it literally: {{ becomes { and }} becomes }.

EXAMPLE: CI-CHECKEDTEST ASSERTED · examples/format-output/src/reference_examples.rs#format-escaping
assert_eq!(format!("{{value}}"), "{value}");

Use the Rust Format Explorer to split a field into its grammar tokens.