按照作者的意思,字符不是看起来那么简单!
的确,字符在大部分语言中,都不是看起来那么简单!
字符的内容看起来很多,又很少!
多是由于涉及到编码、构成、方法(有很多方法)还有字符切片。
少是由于,其实和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编码即可.
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |