# String Utils RS
一个提供字符串和文件处理实用工具的 Rust 库。
## 功能特性
- **字符串处理**: 清理、格式化、转换和验证字符串
- **文本分析**: 统计字符、单词、行数和句子数
- **文件操作**: 读取、写入、复制和删除文件
- **JSON 处理**: 解析、格式化和验证 JSON 数据
- **正则表达式**: 文本替换和模式匹配
- **命名转换**: 支持驼峰命名、蛇形命名等格式转换
## 安装
在你的 `Cargo.toml` 中添加依赖:
```toml
[dependencies]
string-utils-rs = "0.1.0"
```
## 快速开始
```rust
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"]);
}
```
## API 文档
### StringUtils
#### 字符串清理和格式化
```rust
// 清理字符串两端的空白字符
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"
```
#### 文本分析
```rust
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);
```
#### 回文检查
```rust
assert!(StringUtils::is_palindrome("racecar"));
assert!(StringUtils::is_palindrome("A man a plan a canal Panama"));
assert!(!StringUtils::is_palindrome("hello"));
```
#### 正则表达式
```rust
// 替换文本
let result = StringUtils::replace_regex("Hello123World456", r"\d+", "NUMBER").unwrap();
// 结果: "HelloNUMBERWorldNUMBER"
// 提取数字
let numbers = StringUtils::extract_numbers("Hello123World456");
// 结果: [123, 456]
```
### FileUtils
#### 基本文件操作
```rust
// 读取文件
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();
```
#### 文件信息
```rust
// 检查文件是否存在
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")
```
### JsonUtils
#### JSON 解析和格式化
```rust
// 解析 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"#));
```
#### JSON 操作
```rust
// 获取嵌套值
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"),
]);
```
#### 结构体序列化
```rust
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();
```
## 运行示例
```bash
# 运行基本示例
cargo run --example basic_usage
# 运行测试
cargo test
# 运行文档测试
cargo test --doc
```
## 错误处理
库使用自定义错误类型 `StringUtilsError`:
```rust
use string_utils_rs::{Result, StringUtilsError};
fn process_file() -> Result<()> {
let content = FileUtils::read_file("nonexistent.txt")?;
Ok(())
}
```
## 贡献
欢迎提交 Issue 和 Pull Request!
## 许可证
MIT License
## 更新日志
### 0.1.0
- 初始版本
- 基本字符串处理功能
- 文件操作工具
- JSON 处理工具
- 完整的测试覆盖