rust学习九.2、集合之字符串

按照作者的意思,字符串不是看起来那么简单!

的确,字符串在大部分语言中,都不是看起来那么简单!

字符串的内容看起来很多,又很少!

多是因为涉及到编码、构成、方法(有许多方法)还有字符串切片。

少是因为,其实和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有什么深入了解,所以就说一些基本的:

  1. rust的String和其它语言(java)并没有大的区别
  2. 注意rust使用utf-8来存储字符的,无法指定其它字符集。如果要达到那个目的,只能另寻他途
  3. 采用utf-8对于GBK编码的并不友好,无疑多少要会浪费一些空间和性能.如果是java就十分方便,只要指定GBK编码即可.

 

posted @ 2024-11-18 17:08  正在战斗中  阅读(15)  评论(0编辑  收藏  举报