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

打印 上一主题 下一主题

主题 858|帖子 858|积分 2574

按照作者的意思,字符不是看起来那么简单!
的确,字符在大部分语言中,都不是看起来那么简单!
字符的内容看起来很多,又很少!
多是由于涉及到编码、构成、方法(有很多方法)还有字符切片。
少是由于,其实和java等语言其实没有大的区别。
一、构成

rust的字符内部是 vec(u8)+方法,看起来和java其实区别不大,至少在逻辑层面,大家差不多!
rust.String界说

 
java.String界说(jdk17,摘选)
  1. public final class String
  2.     implements java.io.Serializable, Comparable<String>, CharSequence,
  3.                Constable, ConstantDesc {
  4.     @Stable
  5.     private final byte[] value;
  6. }
复制代码
 
没有太多本质的区别,大家都有数组存储实际的值,差异的是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编码即可.
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我爱普洱茶

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表