| Crates.io | grapheme-cluster-utils |
| lib.rs | grapheme-cluster-utils |
| version | 0.1.1 |
| created_at | 2025-09-12 02:05:58.59885+00 |
| updated_at | 2025-09-12 02:07:14.041653+00 |
| description | Unicode-safe String manipulation utilities by extended grapheme cluster (UAX #29). |
| homepage | |
| repository | https://github.com/benracine/grapheme-cluster-utils |
| max_upload_size | |
| id | 1834884 |
| size | 8,319 |
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.
String without breaking multi-codepoint characters (e.g., emoji, flags, accented letters).unicode-segmentation crate.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 🌍!");
GraphemeClusterUtilsfn remove_grapheme_at(&self, n: usize) -> Stringfn insert_grapheme_at(&self, n: usize, insert: &str) -> Stringfn replace_grapheme_at(&self, n: usize, replacement: &str) -> StringAdd to your Cargo.toml:
[dependencies]
grapheme-cluster-utils = "0.1.0"
MIT OR Apache-2.0