Unicode-safe String manipulation utilities for Rust, operating at the level of extended grapheme clusters (user-perceived characters) as defined in Unicode Standard Annex #29.
- Remove, insert, or replace grapheme clusters in a
Stringwithout breaking multi-codepoint characters (e.g., emoji, flags, accented letters). - Built on top of the
unicode-segmentationcrate.
Rust's standard String and char APIs operate on Unicode scalar values, not user-perceived characters. This crate provides helpers to manipulate strings at the grapheme cluster level, so you don't accidentally split emoji, flags, or accented characters.
use grapheme_cluster_utils::GraphemeClusterUtils;
// Remove the astronaut emoji (grapheme cluster at index 3)
let s = String::from("hi 👩🚀!");
let result = s.remove_grapheme_at(3);
assert_eq!(result, "hi !");
// Insert a globe emoji after the space (index 3)
let s = String::from("hi !");
let result = s.insert_grapheme_at(3, "🌍");
assert_eq!(result, "hi 🌍!");
// Replace the astronaut emoji with a globe
let s = String::from("hi 👩🚀!");
let result = s.replace_grapheme_at(3, "🌍");
assert_eq!(result, "hi 🌍!");fn remove_grapheme_at(&self, n: usize) -> Stringfn insert_grapheme_at(&self, n: usize, insert: &str) -> Stringfn replace_grapheme_at(&self, n: usize, replacement: &str) -> String
Add to your Cargo.toml:
[dependencies]
grapheme-cluster-utils = "0.1.0"MIT OR Apache-2.0