Appearance
1.2 字符串
字符串创建
- 字面量创建,直接在栈上面创建的
rust
let my_name = "Pascal";
let my_name = "Pascal";
- String类型创建,在堆上创建数据,栈上面存储引用
rust
let name = String::from("test")
let name = String::from("test")
字符串截取
- 截取区间
rust
let s = String::from("hello world");
let hello = &s[0..5];
let hello = &s[..5];
let world = &s[6..11];
let s = String::from("hello world");
let hello = &s[0..5];
let hello = &s[..5];
let world = &s[6..11];
- 截取末尾
rust
let len = s.len();
let slice = &s[4..len];
let slice = &s[4..];
let len = s.len();
let slice = &s[4..len];
let slice = &s[4..];
- 截取全部
rust
let slice = &s[..];
let slice = &s[..];
String 与 &str 的转换
rust
fn main() {
let s = String::from("hello,world!");
say_hello(&s);
say_hello(&s[..]);
say_hello(s.as_str());
}
fn say_hello(s: &str) {
println!("{}",s);
}
fn main() {
let s = String::from("hello,world!");
say_hello(&s);
say_hello(&s[..]);
say_hello(s.as_str());
}
fn say_hello(s: &str) {
println!("{}",s);
}
操作String
- push
rust
let mut s = String::from("Hello ");
s.push_str("rust");
let mut s = String::from("Hello ");
s.push_str("rust");
- insert
rust
let mut s = String::from("Hello rust!");
s.insert(5, ',');
let mut s = String::from("Hello rust!");
s.insert(5, ',');
- replace
rust
let string_replace = String::from("I like rust. Learning rust is my favorite!");
let new_string_replace = string_replace.replace("rust", "RUST");
let string_replace = String::from("I like rust. Learning rust is my favorite!");
let new_string_replace = string_replace.replace("rust", "RUST");
- replacen
可以指定替换几次
rust
let string_replace = "I like rust. Learning rust is my favorite!";
let new_string_replacen = string_replace.replacen("rust", "RUST", 1);
let string_replace = "I like rust. Learning rust is my favorite!";
let new_string_replacen = string_replace.replacen("rust", "RUST", 1);
- delete
rust
let mut string_pop = String::from("rust pop 中文!");
// 删除最后一个
let p1 = string_pop.pop();
// 删除第一个汉字
string_pop.remove(0);
// 删除字符串中从指定位置开始到结尾的全部字符
string_pop.truncate(3);
let mut string_pop = String::from("rust pop 中文!");
// 删除最后一个
let p1 = string_pop.pop();
// 删除第一个汉字
string_pop.remove(0);
// 删除字符串中从指定位置开始到结尾的全部字符
string_pop.truncate(3);
- clear
rust
let mut string_clear = String::from("string clear");
string_clear.clear();
let mut string_clear = String::from("string clear");
string_clear.clear();
- concat
rust
let string_append = String::from("hello ");
let string_rust = String::from("rust");
// &string_rust会自动解引用为&str
let result = string_append + &string_rust;
let mut result = result + "!"; // `result + "!"` 中的 `result` 是不可变的
result += "!!!";
let string_append = String::from("hello ");
let string_rust = String::from("rust");
// &string_rust会自动解引用为&str
let result = string_append + &string_rust;
let mut result = result + "!"; // `result + "!"` 中的 `result` 是不可变的
result += "!!!";
使用 + 或者 += 连接字符串,要求右边的参数必须为字符串的切片引用(Slice)类型。其实当调用 + 的操作符时,相当于调用了 std::string 标准库中的 add() 方法,这里 add() 方法的第二个参数是一个引用的类型。因此我们在使用 +, 必须传递切片引用类型。不能直接传递 String 类型。+ 是返回一个新的字符串,所以变量声明可以不需要 mut 关键字修饰。
操作 UTF-8 字符串
rust
for c in "中国人".chars() {
println!("{}", c);
}
for c in "中国人".chars() {
println!("{}", c);
}
rust
for b in "中国人".bytes() {
println!("{}", b);
}
for b in "中国人".bytes() {
println!("{}", b);
}