Rust字符串转换库stringcase的使用:支持蛇形、驼峰等多样式大小写转换
use stringcase::snake_case;
fn main() {
let input = "fooBar123Baz";
let snake = snake_case(input);
assert_eq!(snake, "foo_bar123_baz");
}
use stringcase::{snake_case_with_options, Options};
fn main() {
let opts = Options{separate_before_non_alphabets: true, ..Default::default()};
let input = "fooBar123Baz";
let snake = snake_case_with_options(input, &opts);
assert_eq!(snake, "foo_bar_123_baz");
}
use stringcase::{Caser, Options};
fn main() {
let input = "fooBar123Baz";
let snake = input.to_snake_case();
assert_eq!(snake, "foo_bar123_baz");
let opts = Options{separate_before_non_alphabets: true, ..Default::default()};
let snake = input.to_snake_case_with_options(&opts);
assert_eq!(snake, "foo_bar_123_baz");
}
完整示例代码:
// 引入stringcase库
use stringcase::{Caser, Options, camel_case, cobol_case, kebab_case, macro_case, pascal_case, snake_case, train_case};
fn main() {
let input = "fooBar123Baz";
// 基本转换函数示例
println!("原始字符串: {}", input);
println!("camelCase: {}", camel_case(input)); // 驼峰命名法
println!("COBOL-CASE: {}", cobol_case(input)); // COBOL风格
println!("kebab-case: {}", kebab_case(input)); // 短横线命名法
println!("MACRO_CASE: {}", macro_case(input)); // 宏命名法
println!("PascalCase: {}", pascal_case(input)); // 帕斯卡命名法
println!("snake_case: {}", snake_case(input)); // 蛇形命名法
println!("Train-Case: {}", train_case(input)); // 火车命名法
// 使用选项进行转换
let opts = Options {
separate_before_non_alphabets: true,
separate_after_non_alphabets: true,
..Default::default()
};
println!("\n使用选项转换:");
println!("snake_case with options: {}", snake_case_with_options(input, &opts));
// 使用方法进行转换
println!("\n使用方法转换:");
println!("to_camel_case: {}", input.to_camel_case());
println!("to_snake_case: {}", input.to_snake_case());
println!("to_pascal_case: {}", input.to_pascal_case());
// 使用选项的方法转换
println!("to_snake_case_with_options: {}", input.to_snake_case_with_options(&opts));
}
这个库提供了一些函数,可以在camelCase、COBOL-CASE、kebab-case、MACRO_CASE、PascalCase、snake_case和Train-Case之间转换字符串大小写。
基本上,这些函数只针对ASCII大写和小写字母进行大小写转换。除了ASCII大写和小写字母以及ASCII数字之外的所有字符都被视为单词分隔符并被移除。
如果想要使用某些符号作为分隔符,可以在Options结构的separators字段中指定这些符号,并使用相应大小写的〜case_with_options函数。
如果想要保留某些符号并将其他所有内容用作分隔符,可以在Options结构的keep字段中指定这些符号,并使用相应大小写的〜case_with_options函数。
此外,还可以通过转换选项指定是否在非字母字符前后放置单词边界。这可以通过Options结构中的separate_before_non_alphabets和separate_after_non_alphabets字段来设置。
不接受Options作为参数的〜_case函数只在非字母字符后放置单词边界。换句话说,它们的行为就像separate_before_non_alphabets = false和separate_after_non_alphabets = true一样。
该库支持Rust 1.56.1或更高版本。
stringcase:Rust字符串大小写转换库
介绍
stringcase是一个功能丰富的Rust库,专门用于字符串的大小写格式转换。它支持多种常见的大小写命名约定,包括蛇形命名法、驼峰命名法等,适用于代码生成、数据序列化、API交互等多种场景。
主要功能
- 蛇形命名法(snake_case)
- 驼峰命名法(camelCase)
- 帕斯卡命名法(PascalCase)
- 常量命名法(CONSTANT_CASE)
- 烤肉串命名法(kebab-case)
- 标题命名法(Title Case)
- 句子命名法(Sentence case)
安装方法
在Cargo.toml中添加依赖:
[dependencies]
stringcase = "2.0"
使用方法
基本转换示例
use stringcase::{camel_case, snake_case, pascal_case, constant_case, kebab_case};
fn main() {
let input = "hello_world_example";
// 转换为驼峰命名
println!("{}", camel_case(input)); // "helloWorldExample"
// 转换为蛇形命名
println!("{}", snake_case(input)); // "hello_world_example"
// 转换为帕斯卡命名
println!("{}", pascal_case(input)); // "HelloWorldExample"
// 转换为常量命名
println!("{}", constant_case(input)); // "HELLO_WORLD_EXAMPLE"
// 转换为烤肉串命名
println!("{}", kebab_case(input)); // "hello-world-example"
}
处理特殊字符串
use stringcase::{title_case, sentence_case};
fn main() {
let text = "hello world from rust";
// 标题格式
println!("{}", title_case(text)); // "Hello World From Rust"
// 句子格式
println!("{}", sentence_case(text)); // "Hello world from rust"
}
边界情况处理
use stringcase::{camel_case, snake_case};
fn main() {
// 处理数字
println!("{}", camel_case("user_id_123")); // "userId123"
println!("{}", snake_case("userId123")); // "user_id_123"
// 处理空字符串
println!("{}", camel_case("")); // ""
// 处理单个单词
println!("{}", camel_case("hello")); // "hello"
}
自定义分隔符识别
use stringcase::{camel_case, with_options, Options};
fn main() {
let options = Options::new().separator('-');
let result = with_options("hello-world-example", &options, camel_case);
println!("{}", result); // "helloWorldExample"
}
完整示例demo
// 引入stringcase库中的所有转换函数
use stringcase::{
camel_case, snake_case, pascal_case, constant_case, kebab_case,
title_case, sentence_case, with_options, Options
};
fn main() {
// 示例字符串
let input = "hello_world_example";
let text = "hello world from rust";
let mixed_input = "user_id_123";
println!("=== 基本转换示例 ===");
// 转换为驼峰命名
println!("驼峰命名: {}", camel_case(input)); // "helloWorldExample"
// 转换为蛇形命名
println!("蛇形命名: {}", snake_case(input)); // "hello_world_example"
// 转换为帕斯卡命名
println!("帕斯卡命名: {}", pascal_case(input)); // "HelloWorldExample"
// 转换为常量命名
println!("常量命名: {}", constant_case(input)); // "HELLO_WORLD_EXAMPLE"
// 转换为烤肉串命名
println!("烤肉串命名: {}", kebab_case(input)); // "hello-world-example"
println!("\n=== 特殊字符串处理 ===");
// 标题格式
println!("标题格式: {}", title_case(text)); // "Hello World From Rust"
// 句子格式
println!("句子格式: {}", sentence_case(text)); // "Hello world from rust"
println!("\n=== 边界情况处理 ===");
// 处理包含数字的字符串
println!("包含数字的驼峰命名: {}", camel_case(mixed_input)); // "userId123"
println!("包含数字的蛇形命名: {}", snake_case("userId123")); // "user_id_123"
// 处理空字符串
println!("空字符串: '{}'", camel_case("")); // ""
// 处理单个单词
println!("单个单词: {}", camel_case("hello")); // "hello"
println!("\n=== 自定义分隔符识别 ===");
// 使用自定义分隔符
let options = Options::new().separator('-');
let result = with_options("hello-world-example", &options, camel_case);
println!("自定义分隔符转换: {}", result); // "helloWorldExample"
println!("\n=== 综合示例 ===");
// 综合演示各种转换
let test_cases = vec![
"hello_world",
"HelloWorld",
"hello-world",
"HELLO_WORLD",
"hello world"
];
for case in test_cases {
println!("原始: {}", case);
println!(" 蛇形: {}", snake_case(case));
println!(" 驼峰: {}", camel_case(case));
println!(" 帕斯卡: {}", pascal_case(case));
println!(" 常量: {}", constant_case(case));
println!(" 烤肉串: {}", kebab_case(case));
println!(" 标题: {}", title_case(case));
println!(" 句子: {}", sentence_case(case));
println!("---");
}
}
注意事项
- 库函数都是纯函数,不会修改原始字符串
- 所有转换函数都返回新的String实例
- 支持Unicode字符的转换
- 对于边界情况和特殊字符有良好的处理机制
性能建议
对于需要频繁转换的场景,建议将转换结果缓存起来,避免重复计算。
这个库为Rust开发者提供了简单易用且功能完整的字符串大小写转换解决方案。