rust学习九.2、集合之字符串
1.rust学习一、入门之搭建简单开发环境2.rust学习二、入门之运行单个脚本3.rust学习四、控制语句4.rust学习五、认识所有权5.rust学习三、基本类型6.rust学习六、简单的struct结构7.rust学习七、枚举8.rust学习八、包和模块9.rust学习九.1、集合之向量
10.rust学习九.2、集合之字符串
11.rust学习九.3、集合之哈希映射表12.rust学习十、异常处理(错误处理)13.rust学习十一.1、泛型(通用类型)14.rust学习十一.2、利用Trait(特质)定义通用类型的共同行为15.rust学习十一.3、生命周期标记16.rust学习十二、测试17.rust学习十二、一个I/O程序练习18.rust学习十三.1、匿名函数(闭包)19.rust学习十三.2、迭代器20.rust学习十四.1、编译和发布单元包Crate21.rust学习十四.2、工作空间(workspace)22.rust学习十五.1、智能指针基本概念23.rust学习十五.2、智能指针之Box(盒子)指针24.rust学习十五.3、智能指针相关的Deref和Drop特质25.rust学习十五.4、Rc和RefCell指针26.rust学习十五.5、引用循环和内存泄露27.rust学习十六.1、并发-乱弹和一个简单并发例子28.rust学习十六.2、并发-利用消息传递进行线程间通讯29.rust学习十六.3、并发-线程之间共享数据30.rust学习十七.1、async和await31.rust学习十八.1、RUST的OOP和简单示例32.rust学习十九.1、模式匹配(match patterns)按照作者的意思,字符串不是看起来那么简单!
的确,字符串在大部分语言中,都不是看起来那么简单!
字符串的内容看起来很多,又很少!
多是因为涉及到编码、构成、方法(有许多方法)还有字符串切片。
少是因为,其实和java等语言其实没有大的区别。
一、构成
rust的字符串内部是 vec(u8)+方法,看起来和java其实区别不大,至少在逻辑层面,大家差不多!
rust.String定义
java.String定义(jdk17,摘选)
public final class String implements java.io.Serializable, Comparable<String>, CharSequence, Constable, ConstantDesc { @Stable private final byte[] value; }
没有太多本质的区别,大家都有数组存储实际的值,不同的是java存储的是字节数组,而rust存储的u8数组。
这都是表面的,其实都是一个字节数组。
如果用的是rustOver,那么查看源码还是比较方便的,操作方式和eclipse,idea一样,ctrl+点击鼠标左键。
如上图,点击红色矩形中的String,即可跳转到String.rs
二、示例
上例中,使用字符串切片,这个其实和字符串没有本质的区别,因为前者是对字符串的局部引用。
上例中,演示了企图通过索引/或者切片的方式访问多字节utf-8字符的部分数据时发生错误的情形。
这种情况下,会给出足够好友的提示! 这也是rustc的一大优点。
根据这个提示,如果把上文的代码改为:
println!("{}的第一个字符是:{}",cn,&cn[0..3]);
那么还是可以正确执行的!
需要逐个打印字符串的每个字符,可以使用以下方式:
let cn:String="中华人民共和国".to_string();
println!("cn的包含了以下几个汉字:");
for c in cn.chars(){
println!("{}",c);
}
三、小结
才看了个头,不敢说对String有什么深入了解,所以就说一些基本的:
- rust的String和其它语言(java)并没有大的区别
- 注意rust使用utf-8来存储字符的,无法指定其它字符集。如果要达到那个目的,只能另寻他途
- 采用utf-8对于GBK编码的并不友好,无疑多少要会浪费一些空间和性能.如果是java就十分方便,只要指定GBK编码即可.
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 易语言 —— 开山篇