#string #truncate #character #editor #byte-offset #splitting #browser

truncrate

在不分割字符、符号、表情符号等的情况下经济地截断字符串

3 个版本

0.1.3 2019 年 10 月 22 日
0.1.2 2019 年 10 月 22 日
0.1.1 2019 年 9 月 11 日
0.1.0 2019 年 9 月 11 日

#250 in 文本编辑器

Download history 246/week @ 2024-04-03 158/week @ 2024-04-10 263/week @ 2024-04-17 357/week @ 2024-04-24 412/week @ 2024-05-01 313/week @ 2024-05-08 430/week @ 2024-05-15 134/week @ 2024-05-22 140/week @ 2024-05-29 300/week @ 2024-06-05 314/week @ 2024-06-12 221/week @ 2024-06-19 347/week @ 2024-06-26 98/week @ 2024-07-03 200/week @ 2024-07-10 169/week @ 2024-07-17

874 每月下载量
用于 tara

MIT/Apache

21KB
277

truncrate

Rust 库,用于智能截断 Unicode 字符串!

一种经济的方法,可以在不分割图形符号的情况下将字符串截断到指定的字符数或字节偏移量。

示例

根据浏览器编码,'🤚🏾' 将产生一个深色皮肤的手。在大多数文本编辑器中,它看起来像两个独立的字符(🤚 🏾)。

注意截断到 1 不会将图形符号分割成黄色手

use truncrate::*;
let s = "🤚🏾a🤚 🤚🏾\t 🤚    ";

assert_eq!(s.truncate_to_boundary(1), "");
assert_eq!(s.truncate_to_boundary(2), "🤚🏾");

如果你设置的数字边界以空格结尾,截断将为你剪除空格

assert_eq!(s.truncate_to_boundary(4), "🤚🏾a🤚");
assert_eq!(s.truncate_to_boundary(5), "🤚🏾a🤚");

但是,如果截断超过了字符串的大小,它将返回整个字符串

assert_eq!(s.truncate_to_boundary(10), s);

你也可以选择按字节偏移量(即字节大小边界)进行截断


let s = "🤚🏾a🤚 ";
// where "🤚🏾" = 8 bytes
assert_eq!(s.truncate_to_byte_offset(0), "");
assert_eq!(s.truncate_to_byte_offset(8), "🤚🏾");

除了截断单个字符串外,你还可以使用 Unicode 意识进行拆分

let mut s = "🤚🏾a🤚 ";
assert_eq!(s.split_all_to_boundary(1), vec!("a", "🤚"));
assert_eq!(s.split_all_to_boundary(2), vec!("🤚🏾", "a🤚",));

如果你想链式拆分模式,可以使用 'inplace' 函数

let mut s = vec!("🤚🏾a🤚 ", "🤚🏾🤚🏾🤚🏾  ");
// split different byte offsets
s.split_to_offset_inplace(9)
      .split_to_offset_inplace(8)
      .split_to_offset_inplace(10);
assert_eq!(s, vec!("🤚🏾a🤚 ", "🤚🏾", "🤚🏾", "🤚🏾", " "));

你还可以使用 split_all_to_boundary 方法将整个字符串拆分到边界

let s = "🤚🏾a🤚 ";
assert_eq!(s.split_all_to_boundary(3), vec!("🤚🏾a", "🤚 "));

有关完整功能和更多示例,请查看文档。

依赖关系

~550KB