#unicode #string #utility #index #naive #indexed #utf-8

indexed_string

Rust 的字符串对索引的支持的简单实现,支持 O(n) 时间内的 Unicode

1 个不稳定版本

0.1.0 2022年3月25日

#23 in #naive

MIT 许可证

19KB
364

索引 UTF-8 字符串

Rust 的标准库不支持索引和通过类似 vec 的下标语法访问字符串。切片字符串也可能“危险”,因为它会在达到单个 utf-8 字符的中间时引发恐慌并崩溃。

"你应该谨慎使用范围来创建字符串切片,因为这样做可能会使你的程序崩溃"

因此,我尝试创建这个小型简单库,使事情变得简单和轻松。

该库提供基于 vec 的包装类型 IndexedString,支持索引、迭代和修改字符串。它还可以像 vec 一样简单、安全地将字符串和字符串切片转换为字符串和从字符串转换为字符串切片。

安装

只需将依赖项添加到 cargo.toml

[dependencies]
#... other
indexed_string = "0.1.0"

使用

/// import mod to scope
use indexed_string::indexed_string::IndexedString;

let str = "Stand with Ukraine";

/// convert &str to IndexedString
let indexed_string = IndexedString::from(str);

/// immutably access string
assert_eq!(indexed_string[1], "t");
/// mutably access string 
indexed_string[0] = "s";

/// Get modified new string
println!("{}", indexed_string.to_string);

仅是简单的实现和实验性产品

正如其描述,它只是一个 简单的 实现(我对 Rust 不太熟悉)

  1. 为了检测 UTF-8 字符和变体选择符,我写了太多的嵌套 if 语句,这使得代码难以阅读。也许可以使用宏来代替我的方法?
  2. 我对位操作不熟悉,这使代码变得更糟。
  3. 我对生命周期不熟悉,所以我简单地使用 Box 来封装每个字符的 String,这可能会使包装器的函数更丑陋和低效?

但它经过测试并且可以正常工作:)

贡献

欢迎 fork 它并提交重构、错误修复等的 pull request。

许可证

有关详细信息,请访问 网站

无运行时依赖