一.字符串定义

1.Rust的字符串常常指的是String,str,还是一种是字符串字面值。str是字符切片,通常以&str的方式使用。

 //Stringlet r_string:String = String::from("Hello rust string!");//字符字面值定义的strlet r_str = "Hello rust str!";

2.String和&str默认是utf-8编码格式,而rust内置的char类型是4字节长度的,Unicode字符存储,所以Rust里面的字符串不能视为char类型的数组,而是更接近u8类型的数,使用utf-8的优点是跟ASCII码兼容,跟系统的大小端无法,更容易跨平台。

二.获取字符

1.因为rust用的utf-8编码格式,则是不允许使用索引访问字符串。

 let r_string:String = String::from("Hello rust string!");//下标访问let s1 = r_string[1];

这里会报 Stringcannot be indexed by{integer} 这个错误。

2.Rust不实现使用索引的方式是因为字符串索引应该返回的类型是不明确的: 字节值、字符、字形簇或者字符串切片; 使用索引获取 String 字符的原因是索引操作预期总是需要常数时间 (O(1))。但是对于 String 不可能保证这样的性能,因为 IDE不得不检查从字符串的开头到索引位置的内容来确定这里有多少有效的字符。

3.Rust提供另一种区间访问字符串的方式,使用索引的区间位置来切割字符。但必须按字符边界切割。

let e_string = String::from("Hello rust str!");
println!("{}",&e_string[0..1]);

这里会打印出首个字母H,但如果换成中文,这个区间下标就会引起恐慌。

 let c_string:String = String::from("现实与理想");println!("{}",&c_string[0..1]);

会报这个错误:thread ‘main’ panicked at 'byte index 1 is not a char boundary; it is inside ‘现’ (bytes 0…3) of 现实与理想', src/main.rs:8:20
note: run with RUST_BACKTRACE=1 environment variable to display a backtrace ,因为一个中文字符占三个字节,必须按中文的字符的字符边界切割。

let c_string:String = String::from("现实与理想");
println!("{}",&c_string[0..3]);

这里会切出 “现”

4.关于区间访问,rust给了几个语法糖。

 let s = String::from("Hello rust str!");let s1 = &s[..5];//[0..5]let s2 = &s[6..];//[6..(s.len()+1)]let s3 = &s[..];//等于sprintln!("{}\n{}\n{}", s1,s2,s3);

三.字符串之间转换

 //声明一个字符串切片let r_str:&str = "Hello rust str";//str转Stringlet r_s1:String = r_str.to_string();//字面值let r_s2:String = "hello".to_string();//String转strlet s:&str  = &r_str;//数字转Stringlet i = 12;//变量let r_s3:String = i.to_string();//字面值let r_s4:String = 13.to_string();

四.字符串拼接

1.push方法

 let mut ss3 =String::from("String literals");//把一个字符切片加到stringss3.push_str(" add string");//附加单个字符,要写单引号ss3.push('L');

2.使用加号

 //加号let as1 = String::from("Hello");let as2 = String::from(" World!");//相加,第一个是原字符,第二是字符引用,相加后,第一个字符就失效(所有权问题)。//第二字符串所有权被保留let as3 = as1 + &as2;

3.format宏相加

 //format!相加let fos1 = String::from("one");let fos2 = String::from("two");let fos3 = String::from("three");let fos4 = format!("{} {} {}",fos1,fos2,fos3);println!("{}",fos4);

Rus入门到放弃——字符串与字符切片相关推荐

  1. Rus入门到放弃——HashMap和BTreeMap

    概述 1.HashMap和BTreeMap都是通过键值对来存储数据,一个Key对应一个Value,同构. 2.HashMap和BTreeMap是通过键值(任何类型)来查找数据,而不是通过索引,键值是唯 ...

  2. python从入门到放弃 图-python从入门到放弃(二)

    编码类型ASCII码:主要用来显示英文和其他西欧语言,用8位来表示,也就是一个字节,最多只能显示256个符号 UNICODE:也叫万国码,为了解决传统的字符编码方案的局限而产生的,它为每种语言的每个字 ...

  3. 【Java入门】统计字符串中“ a ~ z “各个字符出现的次数

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.知识点 二.代码 三.运行截图 前言 入门版统计字符串中" a ~ z "各个字符出现的次数, ...

  4. Go单元测试从入门到放弃—0.单元测试基础

    这是Go单测从入门到放弃系列教程的第0篇,主要讲解在Go语言中如何做单元测试以及介绍了表格驱动测试.回归测试,并且介绍了常用的断言工具. Go语言测试 go test工具 Go语言中的测试依赖go t ...

  5. AOP埋点从入门到放弃(二)

    其实人最大悲哀莫过于知道自己想要什么,却不知道怎么坚持!最近迷恋上了死侍 其实和我平时的状态差不多,以一个混子的心态去做任何事情,往往成功的概率会更大!!! 一张图片镇楼!!! 上文说到了Aspect ...

  6. Redis从入门到放弃系列(一) String

    Redis从入门到放弃系列(一) String 本文例子基于:5.0.4 字符串是Redis中最常见的数据结构,底层是采用SDS,是可以修改的字符串,类似ArrayList,采用预分配冗余空间的方式来 ...

  7. hex editor怎么搜索代码_代码审计从入门到放弃(三) phplimit

    原创: 一叶飘零 合天智汇 前言 接着前面的代码审计从入门到放弃(一) & function.代码审计从入门到放弃(二) & pcrewaf 本次是phplimit这道题,本篇文章提供 ...

  8. elaseticsearch 配置ik分词器的热更新_Elasticsearch从入门到放弃:分词器初印象

    Elasticsearch 系列回来了,先给因为这个系列关注我的同学说声抱歉,拖了这么久才回来,这个系列虽然叫「Elasticsearch 从入门到放弃」,但只有三篇就放弃还是有点过分的,所以还是回来 ...

  9. JavaScript从入门到放弃 -(六)正则表达式

    正则表达式 1. 正则表达式概述 1.1 什么是正则表达式 1.2 正则表达式的特点 2. 正则表达式在JavaScript中的使用 2.1 创建正则表达式 2.1.1 通过调用 RegExp 对象的 ...

最新文章

  1. 在django中区分null = True,空白= True
  2. leetcode 977. 有序数组的平方(双指针)
  3. 会议之后,对应内容的再次确认
  4. linux和windows的ip区别吗,windows与linux ping 显示的ip不一样
  5. SmartSVN报错format的解决办法
  6. RadiAnt DICOM Viewer 2021 绿色版
  7. 腾讯笔试题 画家小Q
  8. O2O电子商务盈利模式是什么 O2O电子商务模式遇到的困难有哪些?
  9. 【Tomcat】修改密码
  10. 华为云PBX_基于华为云客服平台打造的比特百灵鸟AI管家解决方案发布
  11. 中国美女黑客攻击4G网络?详解
  12. annotate 函数的用法
  13. 困住黑猫 html5,百变大侦探白狐凶手是谁 百变大侦探白狐密室密码
  14. 锋迷商城项目介绍(一)
  15. 职业生涯步步高(转)
  16. 群狼调研开展电器店神秘顾客暗访违规稽核项目
  17. python编程新手常犯的错误_Python程序员常犯的10个错误
  18. day09_类,对象,封装(学习自用)
  19. 记一次Qt5.12.2 Android 开发环境配置
  20. OSS中Bucket绑定域名并配置SSL证书

热门文章

  1. epson机器人编程 范例_2019年机器人盘点(IREX篇)
  2. 01ts简介和相关配置
  3. 【opencv】11.旋转、翻转图片
  4. 图像检索:layer选择与fine-tuning性能提升验证
  5. 分布式消息系统:Kafka
  6. 快速失败Vs安全失败(Java迭代器附示例)
  7. Python常见问题(4):Python库与扩展 Library and Extension FAQ
  8. 机器学习经典书籍小结
  9. 如何制作chm格式的帮助文件
  10. 信息系统项目管理师-常用术语中英文对应