1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/// String-related operations
pub struct StrUtil;
impl StrUtil {
/// 将字符串按照指定分隔符进行分割
///
/// # 参数
/// * `str` - 需要分割的字符串切片
/// * `delimiter` - 用作分割依据的分隔符字符串
///
/// # 返回值
/// 返回一个包含分割后子字符串的向量,每个元素都是原字符串的切片引用
///
/// # 示例
/// ```
/// let result = split("hello,world,rust", ",");
/// assert_eq!(result, vec!["hello", "world", "rust"]);
/// ```
pub fn split<'a>(str: &'a str, delimiter: &str) -> Vec<&'a str> {
str.split(delimiter).collect()
}
/// 从字符串右侧开始查找分隔符,并将字符串分割为两部分
///
/// # 参数
/// * [s](file://d:\git-repo-rust\mitoo\src\id_util.rs) - 需要分割的字符串切片
/// * `delimiter` - 用作分割依据的分隔符字符串
///
/// # 返回值
/// 返回一个Option类型,如果找到分隔符则包含分割后的两个字符串切片的元组,
/// 第一个元素是分隔符左侧的部分,第二个元素是分隔符右侧的部分;
/// 如果未找到分隔符则返回None
pub fn rsplit<'a>(s: &'a str, delimiter: &str) -> Option<(&'a str, &'a str)> {
// 找到最后一个分隔符的索引位置
s.rfind(delimiter).map(|index| {
// 分割为两部分:索引位置前的部分和之后的部分
(&s[..index], &s[index + 1..])
})
}
/// 从字符串中移除指定的前缀
///
/// 如果字符串以指定前缀开头,则返回移除前缀后的字符串切片
pub fn remove_prefix<'a>(str: &'a str, prefix: &str) -> &'a str {
if str.starts_with(prefix) { &str[prefix.len()..] } else { str }
}
/// 从字符串中移除指定的后缀
///
/// 如果字符串以指定后缀结尾,则返回移除该后缀后的字符串切片
pub fn remove_suffix<'a>(str: &'a str, suffix: &str) -> &'a str {
if str.ends_with(suffix) { &str[..str.len() - suffix.len()] } else { str }
}
/// 字符串反转
pub fn reverse(str: &str) -> String {
// 创建一个空的字符串用于存储反转后的结果
let mut reversed = String::new();
// 遍历字符串的每个字符
for c in str.chars() {
// 在每次迭代中,将当前字符添加到反转后的字符串的开头
reversed.insert(0, c);
}
// 返回反转后的字符串
reversed
}
/// 根据字母顺序比较获取两个字符串中的最大值
pub fn max<'a>(str1: &'a str, str2: &'a str) -> &'a str {
if str1 > str2 { str1 } else { str2 }
}
/// 根据字母顺序比较获取两个字符串中的最小值
pub fn min<'a>(str1: &'a str, str2: &'a str) -> &'a str {
if str1 < str2 { str1 } else { str2 }
}
}