[炼手Rust]驼峰变量名

102 阅读1分钟

Hi,大家好,这里是炼手Rust专栏,我是xiaoK,今天来看一个小问题:驼峰变量名。

CamelCase_new.svg.png

提问

提供一个方法或函数,以便将破折号或下划线分隔的单词转换为驼峰式大小写:仅当原始单词大写时,输出中的第一个单词才应大写(称为大驼峰式命名法,也通常称为帕斯卡大小写),接下来的单词首字母应始终大写。

例:
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

  1. 引入了新的正则表达式库regex::Regex进行字符串的分割。
  2. 使用enumerate函数,枚举列表项中的下标和项,方便判断。
  3. 字符串可以通过get_mut获得一个可变的切片,对该切片的操作会反应到原始字符串上,rust是真niubility!
  4. make_ascii_uppercase方法,可以修改字符串按照ascii方式为大写。