首页 技术杂谈 正文
  • 本文约1367字,阅读需7分钟
  • 478
  • 0

Rust - String

摘要

Rust中的String,动态UTF-8编码字符串的容器。它支持可变长度,提供丰富的方法进行字符串操作,是处理文本数据的强大工具,确保了内存安全和编码正确性。

字符串

1、字符串就是基于字节byte的集合

2、能将byte解析为文本

1、字符串是什么

1、Rust的核心语言层面,只有一个字符串类型:字符串切片str(或&str)

2、字符串切片:对存储在其他地方、UTF-8编码的字符串的引用
-字符串字面值:存储在二进制文件中,也是字符串切片

2、String类型

1、来自标准库而不是核心语言

2、它是可增长、可修改、可拥有的

3、它采用的是UTF-8编码

2.1、通常说的字符串是指

1、String和&str(字符串切片)这两种类型

2.2、其他类型的字符串

1、Rust的标准库还包含了很多其他的字符串类型,例如:OsString、OsStr、CString、CStr

  • 区别在于:string 和 str 后缀,string是拥有所有权,str后缀指可借用
  • 可存储不同编码的文本或在内存中以不同的形式展现

3、创建一个新的字符串(String)

1、很多Vec<T>的操作都可用于String

2、通过String::new()函数创建

3、常用的创建方法:使用初始值来创建String

  • to_string() 方法,可用于实现Display trait的类型,包括字符串字面值

    
    // 创建字符串
    let mut s = String::new();
    // 常用的方法 to_string转换
    let s = "test"; // 现在是&str类型
    let news = s.to_string(); // 通过to_string转换,变成string类型
    // 直接使用to_string
    let s1 = "hello world".to_string(); // 这样直接是string类型
    // 使用string::from函数创建
    let s2 = String::from("world hello");```

4、更新String

1、pust_str()方法:把一个字符串切片(&strs)附加到string

  • 这个方法不会获取参数的所有权

2、pust()方法:把单个字符附加到string

5、拼接字符串

1、+号连接

  • 前面的值是字符串,后面的值是字符串切片
  • 后面如果要继续使用这两个值,前面的值已经不能使用,后面的值因为传的是引用,所以可以继续使用

2、format! 宏:这个不会获取任何字符串的所有权


 let ss3 = format!("{}-{}",ss,ss1);
// 拼接字符串
 let ss = String::from("hello");
 let ss1 = String::from("world");
 //let add_ss = ss + &ss1;
 //println!("{}",add_ss);
 // println!("ss的值:{}",ss); 不能使用这值
 println!("ss1的值:{}",ss1);

 // format!宏:连接多个字符串
 let ss3 = format!("{}-{}",ss,ss1);

6、为什么String类型不能通过索引表示?

1、String类型是不支持通过索引的方式访问,因为string没有实现一个trait

7、内部表示

1、String类型,内部其实是Vec<u8>组成的

2、Rust有三种看待字符串的方式:

  • 字节 .byte方法
  • 标量值 .chars方法
  • 字形簇 第三方库

3、Rust不允许对String进行索引的最后一个原因

  • 索引操作消耗一个常量时间
  • 而String无法保证:需要遍历所有内容,来确定有多少个合法的字符。
评论