rufl/string/split_graphemes.rs
1/// Split the target string into a vector of graphemes str.
2///
3///
4/// # Arguments
5///
6/// * `s` - The string to split into characters.
7///
8/// # Returns
9///
10/// Returns a vector containing the characters extracted from the input string.
11///
12/// # Example
13///
14/// ```rust
15/// use rufl::string;
16///
17/// assert_eq!(vec!["a̐", "é", "ö̲"], string::split_graphemes("a̐éö̲"));
18///
19/// assert_eq!(vec!["h", "e", "l", "l", "o"], string::split_graphemes("hello"));
20///
21/// assert_eq!(vec!["你", "好"], string::split_graphemes("你好"));
22///
23/// ```
24
25pub fn split_graphemes(s: &str) -> Vec<&str> {
26 if s.is_empty() {
27 return vec![""];
28 }
29
30 unicode_segmentation::UnicodeSegmentation::graphemes(s, true).collect::<Vec<&str>>()
31}
32
33#[cfg(test)]
34mod tests {
35 use super::*;
36
37 #[test]
38 fn test_split_graphemes() {
39 assert_eq!(vec![""], split_graphemes(""));
40 assert_eq!(vec!["h", "e", "l", "l", "o"], split_graphemes("hello"));
41 assert_eq!(vec!["a̐", "é", "ö̲"], split_graphemes("a̐éö̲"));
42 assert_eq!(vec!["你", "好"], split_graphemes("你好"));
43 }
44}