| Crates.io | xxxxx_rust_sts |
| lib.rs | xxxxx_rust_sts |
| version | 0.1.0 |
| created_at | 2025-06-30 05:41:38.853953+00 |
| updated_at | 2025-06-30 05:41:38.853953+00 |
| description | A collection of useful string and file utilities for Rust |
| homepage | |
| repository | https://github.com/yourusername/string-utils-rs |
| max_upload_size | |
| id | 1731457 |
| size | 24,923 |
一个提供字符串和文件处理实用工具的 Rust 库。
在你的 Cargo.toml 中添加依赖:
[dependencies]
string-utils-rs = "0.1.0"
use string_utils_rs::{StringUtils, FileUtils, JsonUtils};
fn main() {
// 字符串处理
let text = " Hello, World! ";
let cleaned = StringUtils::clean_whitespace(text);
println!("清理后: {}", cleaned); // 输出: Hello, World!
// 文本分析
let stats = StringUtils::analyze_text("Hello world! This is a test.");
println!("字符数: {}, 单词数: {}", stats.char_count, stats.word_count);
// 文件操作
FileUtils::write_file("test.txt", "Hello, World!").unwrap();
let content = FileUtils::read_file("test.txt").unwrap();
println!("文件内容: {}", content);
// JSON 处理
let json_str = r#"{"name": "John", "age": 30}"#;
let json = JsonUtils::parse_json(json_str).unwrap();
println!("姓名: {}", json["name"]);
}
// 清理字符串两端的空白字符
let cleaned = StringUtils::clean_whitespace(" hello ");
// 结果: "hello"
// 移除所有空白字符
let result = StringUtils::remove_whitespace("Hello World!");
// 结果: "HelloWorld!"
// 转换为标题格式
let title = StringUtils::to_title_case("hello world");
// 结果: "Hello World"
// 转换为驼峰命名
let camel = StringUtils::to_camel_case("hello world");
// 结果: "helloWorld"
// 转换为蛇形命名
let snake = StringUtils::to_snake_case("Hello World");
// 结果: "hello_world"
let stats = StringUtils::analyze_text("Hello world! This is a test.");
println!("字符数: {}", stats.char_count);
println!("单词数: {}", stats.word_count);
println!("行数: {}", stats.line_count);
println!("句子数: {}", stats.sentence_count);
assert!(StringUtils::is_palindrome("racecar"));
assert!(StringUtils::is_palindrome("A man a plan a canal Panama"));
assert!(!StringUtils::is_palindrome("hello"));
// 替换文本
let result = StringUtils::replace_regex("Hello123World456", r"\d+", "NUMBER").unwrap();
// 结果: "HelloNUMBERWorldNUMBER"
// 提取数字
let numbers = StringUtils::extract_numbers("Hello123World456");
// 结果: [123, 456]
// 读取文件
let content = FileUtils::read_file("input.txt").unwrap();
// 写入文件
FileUtils::write_file("output.txt", "Hello, World!").unwrap();
// 复制文件
FileUtils::copy_file("source.txt", "dest.txt").unwrap();
// 删除文件
FileUtils::delete_file("temp.txt").unwrap();
// 检查文件是否存在
if FileUtils::file_exists("file.txt") {
println!("文件存在");
}
// 获取文件信息
let info = FileUtils::get_file_info("file.txt").unwrap();
println!("文件大小: {} 字节", info.size);
// 获取人类可读的文件大小
let size = FileUtils::get_human_readable_size("file.txt").unwrap();
println!("文件大小: {}", size); // 例如: "1.5 MB"
// 获取文件扩展名
let ext = FileUtils::get_extension("file.txt");
// 结果: Some("txt")
// 获取文件名
let filename = FileUtils::get_filename("/path/to/file.txt");
// 结果: Some("file.txt")
// 解析 JSON
let json_str = r#"{"name": "John", "age": 30}"#;
let json = JsonUtils::parse_json(json_str).unwrap();
// 格式化 JSON
let formatted = JsonUtils::format_json(&json).unwrap();
// 紧凑格式
let compact = JsonUtils::compact_json(&json).unwrap();
// 验证 JSON
assert!(JsonUtils::is_valid_json(r#"{"name": "John"}"#));
assert!(!JsonUtils::is_valid_json(r#"{"name": "John"#));
// 获取嵌套值
let json_str = r#"{"user": {"name": "John", "age": 30}}"#;
let json = JsonUtils::parse_json(json_str).unwrap();
let name = JsonUtils::get_value(&json, "user.name").unwrap();
// 结果: "John"
// 合并 JSON 对象
let json1 = serde_json::json!({"name": "John"});
let json2 = serde_json::json!({"age": 30});
let merged = JsonUtils::merge_json(&json1, &json2).unwrap();
// 创建 JSON 对象
let json = JsonUtils::create_object(&[
("name", "John"),
("age", "30"),
]);
use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize)]
struct Person {
name: String,
age: u32,
}
let person = Person {
name: "John".to_string(),
age: 30,
};
// 序列化
let json_str = JsonUtils::to_json_string(&person).unwrap();
// 反序列化
let parsed_person: Person = JsonUtils::from_json_string(&json_str).unwrap();
# 运行基本示例
cargo run --example basic_usage
# 运行测试
cargo test
# 运行文档测试
cargo test --doc
库使用自定义错误类型 StringUtilsError:
use string_utils_rs::{Result, StringUtilsError};
fn process_file() -> Result<()> {
let content = FileUtils::read_file("nonexistent.txt")?;
Ok(())
}
欢迎提交 Issue 和 Pull Request!
MIT License