Rust 容器String

创建String

//创建空字符串
let mut s = String::new();
//根据字符串字面值创建字符串 to_string();
let data = "initial contents"';
let s = data.to_string();
let s1 = "initial contents".to_string();
//使用String::from("initial contents");
let s = String::from("initial contents");

更新String

  • put_str()方法:把一个字符串切片附加到String
  • push()方法:把单个字符附加到String
  • +:连接字符串
    使用了类似这个签名的方法fn add(self, sL &str) -> String{…}
  • format!:连接多个字符串
//push_str()
let mut s = String::from("foo");
s.push_str("bar");
println!("{}", s);
//push()
s.push('l');
// + 
let s1 = String::from("Hello, ");
let s2 = String::from("World!");
let s3 = s1 + &s2;
println!("{}", s3);

let s3 = format!("{}{}", s1, s2);

Rust不允许对String按索引的形式进行访问

内部表示:Vec:u8

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

  • 字节
  • 标量值
  • 字形簇(最接近所谓的“字母”, 相对复杂标准库未提供)
let s = "नमस्ते";
for c in s.chars(){ //通过标量值遍历
    println!("{}", c);
}
/*
न
म
स
्
त
े
*/
for c in s.bytes(){ // 通过字节遍历
    println!("{}", c);
}
/*
224
164
// --snip--
165
135
*/

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

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

切割String

fn main(){
    let hello = "Здравствуйте";
    let s = &hello[0..4];
    println!("{}", s);
}

可以使用[]和一个范围来创建字符串切片

  • 必须谨慎使用
  • 如果切割是跨越了字符边界,程序就好panic。
上一篇:Rust-闭包:可以捕获环境的匿名函数


下一篇:Rust-宏