Hi,大家好,这里是炼手Rust专栏,我是xiaoK,今天来看一个小问题:驼峰变量名。
提问
提供一个方法或函数,以便将破折号或下划线分隔的单词转换为驼峰式大小写:仅当原始单词大写时,输出中的第一个单词才应大写(称为大驼峰式命名法,也通常称为帕斯卡大小写),接下来的单词首字母应始终大写。
例:
input:"the-stealth-warrior"
output:"theStealthWarrior"
input:"The_Stealth_Warrior"
output:"TheStealthWarrior"
模板:
pub fn to_camel_case(text: &str) -> String { }
分析
驼峰命名法本身的逻辑是,单词分隔符的下一个单词的首字母大写。所以,我们先分割原始的字符串,然后针对每一个大于位置 0 的单词,首字母大写即可。
解决方案
use regex::Regex;
pub fn to_camel_case(text: &str) -> String {
Regex::new(r"[_-]")
.unwrap()
.split(text)
.enumerate()
.map(|(i, x)| {
if i != 0usize {
let mut s = x.to_string();
if let Some(r) = s.get_mut(0..1) {
r.make_ascii_uppercase()
}
s
} else {
x.to_string()
}
})
.collect()
}
Trick
- 引入了新的正则表达式库
regex::Regex进行字符串的分割。 - 使用
enumerate函数,枚举列表项中的下标和项,方便判断。 - 字符串可以通过
get_mut获得一个可变的切片,对该切片的操作会反应到原始字符串上,rust是真niubility! make_ascii_uppercase方法,可以修改字符串按照ascii方式为大写。