Complete function reference for import str. For module internals see
str_core.md and str_extra.md.
| Function | Example | Result |
|---|
capitalize(text) | "hELLO wORLD" | "Hello world" |
swapcase(text) | "Hello World" | "hELLO wORLD" |
is_uppercase(text) | "HELLO123" | True |
is_lowercase(text) | "hello_world" | True |
is_title_case(text) | "Hello World" | True |
is_mixed_case(text) | "helloWorld" | True |
str.to_snake_case("Hello World") // → "hello_world"
str.to_camel_case("hello world") // → "helloWorld"
str.to_pascal_case("hello world") // → "HelloWorld"
str.to_kebab_case("Hello World") // → "hello-world"
str.to_title_case("hello world") // → "Hello World"
str.camel_to_snake("camelCase") // → "camel_case"
str.pascal_to_snake("PascalCase") // → "pascal_case" // alias for camel_to_snake
str.snake_to_camel("snake_case") // → "snakeCase"
str.snake_to_pascal("snake_case") // → "SnakeCase"
| Function | Example | Result |
|---|
take(text, n) | take("👨👩👧👦abc", 2) | "👨👩👧👦a" |
drop(text, n) | drop("hello", 2) | "llo" |
take_right(text, n) | take_right("hello", 3) | "llo" |
drop_right(text, n) | drop_right("hello", 2) | "hel" |
at(text, index) | at("hello", 1) | Ok("e") |
chunk(text, size) | chunk("abcdef", 2) | ["ab", "cd", "ef"] |
length(text) | length("👨👩👧👦") | 1 |
reverse(text) | reverse("Hello 👋") | "👋 olleH" |
| Function | Example | Result |
|---|
index_of(text, needle) | "hello world", "world" | Ok(6) |
last_index_of(text, needle) | "hello hello", "hello" | Ok(6) |
contains(text, needle) | "hello world", "world" | True |
contains_any(text, needles) | "hello", ["x", "e"] | True |
contains_all(text, needles) | "hello", ["h", "e"] | True |
replace_first(text, old, new) | "aaa", "a", "b" | "baa" |
replace_last(text, old, new) | "aaa", "a", "b" | "aab" |
Automatic heuristic selection between KMP (long/repetitive patterns) and
sliding window (short patterns, zero allocations). Configure thresholds in
str/config.
| Function | Description |
|---|
index_of_auto(text, pattern) | Heuristic algorithm selection |
index_of_strategy(text, pattern, Kmp|Sliding) | Explicit algorithm |
count_auto(text, pattern, overlapping) | Heuristic for counting |
count_strategy(text, pattern, overlapping, Kmp|Sliding) | Explicit count |
For pre-built KMP maps (hot loops), use import str/advanced. See
str_core.md for details.
| Function | Example | Result |
|---|
partition(text, sep) | "a-b-c", "-" | #("a", "-", "b-c") |
rpartition(text, sep) | "a-b-c", "-" | #("a-b", "-", "c") |
splitn(text, sep, n) | "a-b-c-d", "-", 2 | ["a", "b-c-d"] |
words(text) | "hello world" | ["hello", "world"] |
lines(text) | "a\nb\nc" | ["a", "b", "c"] |
| Function | Example | Result |
|---|
pad_left(text, width, pad) | "42", 5, "0" | "00042" |
pad_right(text, width, pad) | "hi", 5, "*" | "hi***" |
center(text, width, pad) | "hi", 6, "-" | "--hi--" |
fill(text, width, pad, pos) | "x", 5, "-", Both | "--x--" |
FillPosition values: Left, Right, Both.
| Function | Example | Result |
|---|
starts_with(text, prefix) | "hello", "he" | True |
ends_with(text, suffix) | "file.txt", ".txt" | True |
starts_with_any(text, list) | "hello", ["hi", "he"] | True |
ends_with_any(text, list) | "file.txt", [".txt"] | True |
remove_prefix(text, prefix) | "hello world", "hello " | "world" |
remove_suffix(text, suffix) | "file.txt", ".txt" | "file" |
ensure_prefix(text, prefix) | "world", "hello " | "hello world" |
ensure_suffix(text, suffix) | "file", ".txt" | "file.txt" |
common_prefix(strings) | ["abc", "abd"] | "ab" |
common_suffix(strings) | ["abc", "xbc"] | "bc" |
| Function | Description |
|---|
is_empty(text) | Empty string |
is_blank(text) | Whitespace only |
is_numeric(text) | Digits only (0–9) |
is_alpha(text) | Letters only |
is_alphanumeric(text) | Letters and digits |
is_ascii(text) | ASCII only (0x00–0x7F) |
is_printable(text) | Printable ASCII (0x20–0x7E) |
is_hex(text) | Hexadecimal (0–9, a–f, A–F) |
is_uppercase(text) | All cased chars uppercase |
is_lowercase(text) | All cased chars lowercase |
is_title_case(text) | Title Case format |
is_mixed_case(text) | Both cases present |
| Function | Example | Result |
|---|
escape_html(text) | "<div>" | "<div>" |
unescape_html(text) | "<div>" | "<div>" |
escape_regex(text) | "a.b*c" | "a\\.b\\*c" |
| Function | Example | Result |
|---|
distance(a, b) | "kitten", "sitting" | 3 |
similarity(a, b) | "hello", "hallo" | 0.8 |
hamming_distance(a, b) | "karolin", "kathrin" | Ok(3) |
similarity uses normalized Levenshtein: 1.0 - distance(a,b) / max(len(a), len(b)).
| Function | Description |
|---|
truncate(text, len, suffix) | Truncate grapheme-aware |
truncate_strict(text, len, suffix) | Truncate — may split emoji |
truncate_preserve(text, len, suffix) | Truncate — keeps emoji whole |
ellipsis(text, len) | Truncate with … |
normalize_whitespace(text) | Collapse to single spaces |
strip(text, chars) | Remove char set from ends |
squeeze(text, char) | Collapse consecutive chars |
chomp(text) | Remove trailing newline |
surround(text, pre, suf) | Add prefix and suffix |
unwrap(text, pre, suf) | Remove prefix and suffix |
strip_affixes(text, pre, suf) | Alias for unwrap (preferred) |
reverse_words(text) | Reverse word order |
initials(text) | Extract initials |
strip(text, chars) — chars is a set of graphemes, not a literal substring.
| Function | Description |
|---|
lines(text) | Split into lines |
dedent(text) | Remove common indentation |
indent(text, spaces) | Add indentation |
wrap_at(text, width) | Word wrap |
str.ascii_fold("Crème Brûlée") // → "Creme Brulee"
str.ascii_fold("straße") // → "strasse"
str.ascii_fold("æon") // → "aeon"
ascii_fold_no_decompose applies only the precomposed replacement table,
skipping NFD decomposition. Use it when the input is already NFC-normalized
and you want to avoid re-decomposing.
For OTP-based NFC/NFD normalization, see otp_integration.md.
str.slugify("Hello, World!") // → "hello-world"
str.slugify_opts("one two three", 2, "-", False) // → "one-two"
str.slugify_opts("Hello World", -1, "_", False) // → "hello_world"
slugify_opts parameters:
max_len — max tokens. -1 = no limit.
sep — separator string.
preserve_unicode — True keeps non-ASCII chars instead of folding.