安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

Rust学习笔记(二十)String(下)

11月7日 斩情道投稿
  对String按索引的形式进行访问
  按索引语法访问String的某一部分会报错,例:fnmain(){lets1:StringString::from(12);lets2:Strings1〔0〕;}cargorunCompilingmyprojectv0。1。0(E:ProjectsRustmyproject)error〔E0277〕:thetypeStringcannotbeindexedby{integer}srcmain。rs:3:223lets2:Strings1〔0〕;Stringcannotbeindexedby{integer}help:thetraitIndex{integer}isnotimplementedforStringFormoreinformationaboutthiserror,tryrustcexplainE0277。error:couldnotcompilemyprojectduetopreviouserror
  所以Rust字符串不支持索引语法访问。String类型的内部表示
  String是对Vec的包装。String有一个len()方法,它返回的是String所占的字节数。例:fnmain(){letlenString::from(ypa)。len();println!({},len);letlenString::from()。len();println!({},len);}
  以上代码输出3和6。因为字符串编码是UTF8,英文字母在UTF8占一个字节,所以ypa占3个字节。但是后面的并不是英文字母ypa,它是俄文,每个占2个字节,所以是6。注:常用汉字在UTF8编码下每个占3个字节。字节(Bytes)、标量值(ScalarValues)、字形簇(GraphemeClusters)
  Rust有三种看待字符串的方式:字节标量值字形簇(最接近字母的概念)
  例:fnmain(){letwordString::from();forbyteinword。bytes(){以字节的形式表达字符串println!({},byte);}println!();forscalarinword。chars(){以Unicode标量值的形式表达字符串println!({},scalar);}}
  因为字形簇处理起来比较复杂,所以Rust标准库没有提供返回字形簇的方法。可以借助Librarycrate来转换字符串为字形簇,例:首先在Cargo。toml添加依赖:〔package〕namemyprojectversion0。1。0edition2021〔dependencies〕unicodesegmentation1。8。0useunicodesegmentation::UnicodeSfnmain(){letwordString::from();forscalarinword。graphemes(true){以字形簇的形式表达字符串println!({},scalar);}}
  由于以上三种形式,所以Rust不能用索引来访问String的部分数据。而Rust不允许对String使用索引还有另一个原因:
  索引操作预期总是需要常数时间(O(1))。但是对于String不可能保证这样的性能,因为Rust必须从开头到索引位置遍历来确定有多少有效的字符。切割String
  可以使用〔〕和一个范围来创建字符串切片,例如:fnmain(){letwordString::from();letsword〔0。。4〕;取前4个字节(左闭右开)println!({},s);因为此处是俄文,每个字母占2个字节,所以打印结果是letsword〔0。。3〕;取前3个字节println!({},s);编译通过但是运行时panic。threadmainpanickedatbyteindex3itisinside(bytes2。。4)of,srcmain。rs:8:14}
  需要谨慎使用,因为如果切割时跨越了字符边界,程序运行时会panic,例如:假设某种文字,每个字符占2个字节,有此种语言的字符串(b1,b2)(b3,b4)(b5,b6),此时切割b1,b2,b3这三个字节,会导致b3跨越了第二个字符(b3,b4)而panic。遍历String的方法
  在字节(Bytes)、标量值(ScalarValues)、字形簇(GraphemeClusters)里已经有了例子。对于标量值:chars()方法对于字节:bytes()方法对于字形簇:很复杂,标准库未提供,可借助第三方crateString不简单
  Rust选择将正确处理String数据作为所有Rust程序的默认行为,程序员必须在处理UTF8数据之前投入更多精力。但是可以防止在开发后期处理设计非ASCII字符的错误。
投诉 评论 转载

OPPOK10Pro深度上手骁龙88880W快充,三星LCD大家好,OPPOK10Pro携着很高性价比发布了,我来说说上手感受吧!从颜值来看,两段式的设计K系列烙印自成一格,很让人印象深刻,我手上是钛黑色外观,在光线映射下呈现炫酷的银色……面对人工智能时代最让你忧虑的是什么?面对人工智能,最让我们忧虑的不是技术问题,而是:随着人工智能的普及和大规模使用,人类正在被人工智能所圈养:我们获取什么样的信息,接受什么样的外部环境,人工智能都在无时无刻的进行……还在纠结红米k50?44部骁龙865任你选新旗舰芯片摆烂,老芯片骁龙865更香下面选一部你最喜欢的骁龙865带走吧小米10屏幕尺寸:6。67英寸1080p曲屏CPU型号:高通骁龙865电池……被监控的打工人因算法裁定效率低下,近150名员工遭解雇近日,一家公司通过AI算法裁掉三成员工的消息在网上引起热议。据GameWorldObserver报道,俄罗斯在线支付服务公司Xsolla使用算法解雇了147名员工,占到员工总数……程序员辞职回乡改行送菜文章首发于微信公众号非著名程序员,欢迎大家关注。大家好,我是校长。今天我们聊两个有意思的程序员案例,因为这两个事件都登上了微博热搜,在我看来,程序员从互联网行业转型……奇瑞小蚂蚁敞篷版亮相,配硬顶敞篷,双拼色座椅,外观很运动在QQ冰淇淋亮相成都车展的同时,奇瑞的另一款小型新能源汽车小蚂蚁也在车展上与消费者们见了面。上一款小蚂蚁在上市之后,受到了广大消费者的喜爱,不输宏光MINI。而这一次的小蚂蚁却……Rust学习笔记(二十)String(下)对String按索引的形式进行访问按索引语法访问String的某一部分会报错,例:fnmain(){lets1:StringString::from(12);lets2:……9月17日前,必须完成!官方终决心捅破窗户纸今年,我们对于国内大企业的垄断行为进行了重拳出击,这对于整个市场来说无疑具有深远的影响。此前,有网友向有关部门反映,淘宝、微信之间网页链接互相之间无法打开。而就在前几日,……比特币重回6万3,屎币套现,动物园崩盘,柴犬币SHIB暴跌原先来看看昨日总体行情:整体下跌2927个,上涨2050个恐慌指数与贪婪73昨日前十市值排行榜行情方面:比特币最低触底59900附近开始反弹,目前币价在6……安卓动画制作逐帧动画framebyframeanim先在resdrawable添加xml,在文件里添加animationlist标签,内嵌多个item并指明drawable和dura……传音新机在海外发布!内置7000mAh超大电池,外观很炫酷在国内市场很多用户都没有听过传音这个品牌,但在海外市场传音可以说是名声大噪,尤其是在印度市场,传音手机可以说是家喻户晓的存在,而近日,传音也在印度发布了一款新机,吸引了很多用户……腾讯开源的企业级设计体系TDesign《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的是一个腾讯开源的企业级设计体系TDesign。T……
快递驿站平台都有哪些?有什么区别?2022年选择加盟哪个更好围观!8月份最值得推荐9大手机Apple三星一加小米等红米K40真实的现状,优缺点一目了然油价别慌!领克新能源陪你绿色出行明日主题前瞻年末想要换手机,华为荣耀小米苹果怎么选?内行人都这么说社会人必备的五个资源网站,资源多到爆,要什么有什么北京互联网法院发布涉短视频著作权十件典型案例日本研究奥密克戎BA。2引发症状能力与BA。1相似秒杀单反?能拍星星的手机你见过吗?5G手机即将登场,4G手机还能撑多久?雷军说出答案,网友有点海外虚拟主机的好处和坏处及选择攻略?南平今日毛猪价格哪个牌子的洗发露补水老父幽默名言名语三伏天吃一口等于3瓶牛奶,孩子不妨多吃,长成大高个吉祥物都懵了!快船奇兵采访后微笑转身,女记者摔倒在地一声巨响猪心就要这样做葱爆猪心香辣爽口快手菜如何上好幼儿园一堂课中学毕业生中考百日冲刺誓师大会主持词姓魏的女孩名字洋气点三个字姓魏的女孩取名曹仁宪谨荣寿其二吴晓波成众失之的,要知道金子有金子底气!沙子有沙子价值

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利